在Linux下某些编译要求root权限,可是很多时候在root下就无法使用java、javac等相关命令,导致编译无法通过。
分析原因:
root运行java都是/usr/bin/java这个引用,由于Linux中可能会引用默认的JDK,如openjdk,所以是否安装JDK对它完全没有影响。
解决办法:
手动替换默认的Jdk版本
sudoupdate-alternatives--configjava
系统会列出各种JDK版本,如下所示:
有 3 个候选项可用于替换 java (提供 /usr/bin/java)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式
1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式
2 /usr/lib/jvm/java-6-sun/jre/bin/java 63 手动模式
3 /usr/lib/jvm/java-7-sun/bin/java 300 手动模式
要维持当前值[*]请按回车键,或者键入选择的编号:3
注:update-alternatives: 使用 /usr/lib/jvm/java-7-sun/bin/java 来提供 /usr/bin/java (java),于手动模式中。
⑵ 如何在linux终端里面运行java
通常用命令、shell脚本,或者直接运行程序可执行的程序。像java的jar包可以用java -jar xxx.jar执行。eclipse也可以cd到eclipse解压目录,然后./eclipse执行eclipse这个程序。
可以看看shell脚本,和java相关的命令和工具(javac,javap,jvisualvm,jconsole等等)。
所有的软件都有一个可执行脚本或者可执行程序。cd过去sh xxx.sh 或者./xxx.sh就可以在命令行执行。像tomcat也有startup.sh和shutdown.sh。你也可以看看,其实就是一个很复杂的shell脚本
⑶ java杩灭▼linux镓ц岃剼链琷ava杩灭▼linux
java杩灭▼璋幂敤锛屽叿浣揿疄鐜帮纻
1銆佷娇鐢╦ava浠g爜阃氲繃ssh锏婚檰linux骞舵墽琛屽懡浠わ纴姝e父𨱍呭喌涓媠shd链嶅姟閮戒细链夛纴鐭ラ亾鐢ㄦ埛瀵嗙爜灏卞彲浠ヤ娇鐢ㄨ繖绉嶆柟寮忎简銆
2銆佽佸湪杩灭▼linux链嶅姟鍣ㄤ笂镓ц屽懡浠わ纴鍙浠ュ湪linux链嶅姟鍣ㄤ笂钖锷ㄤ竴涓链嶅姟锅氭墽琛岃剼链镄勪唬鐞嗭纴涓嶆柇鎺ュ弹𨱒ヨ嚜浣犺繖涓椤圭洰鍙戞潵镄勮剼链淇℃伅锛岀劧钖庢墽琛岋纴鍐嶆妸缁撴灉杩斿洖缁欎綘椤圭洰涓铡汇
绗涓绉嶏细浠ユ秷鎭阒熷垪镄勬柟寮忓彂阃佽繖浜涜剼链淇℃伅锛宭inux浠g悊涓嶆柇鎺ュ弹锛屽苟杩斿洖缁撴灉銆傞”鐩钖屾椂瑕佷笉鏂鎺ュ弹缁撴灉銆
绗浜岀嶏细椤圭洰涓浜х敓镄勮剼链锛岀洿鎺ヨ板綍鍒版暟鎹搴掳纴linux涓婄殑浠g悊璁块梾杩欎釜鏁版嵁搴掳纴銮峰彇鑴氭湰淇℃伅锛屽苟灏嗘墽琛岀粨鏋滃啓鍏ユ暟鎹搴撱傞”鐩涓杞璇㈡墽琛岀粨鏋溿备笂闱㈡垜璇寸殑娑堟伅阒熷垪鍙浠ラ噰鐢╝ctivemq锛屾垨钥卹abbitmq杩欎簺銆傚懡浠ゆ墽琛岋纴java涓鐩存帴Runtime.getRuntime().exec(command);灏辫屼简銆
linux杩灭▼宸ュ叿锛
1銆乆shell
浠嬬粛锛歺shell鏄涓涓闱炲父寮哄ぇ镄勫畨鍏ㄧ粓绔妯℃嫙杞浠讹纴瀹冩敮鎸丼SH1,SSH2,浠ュ强Windows骞冲彴镄凾ELNET鍗忚銆俋shell鍙浠ュ湪Windows鐣岄溃涓嬬敤𨱒ヨ块梾杩灭涓嶅悓绯荤粺涓嬬殑链嶅姟鍣锛屼粠钥屾瘆杈冨ソ镄勮揪鍒拌繙绋嬫带鍒剁粓绔镄勭洰镄勚傦纸涔熸槸鎴戠洰鍓崭娇鐢ㄧ殑杩灭▼杩炴帴宸ュ叿锛
2銆乻ecureCRT
浠嬬粛锛
SecureCRT鏀鎸丼SH锛屽悓镞舵敮鎸乀elnet鍜宺login鍗忚銆係ecureCRT鏄涓娆剧敤浜庤繛鎺ヨ繍琛屽寘𨰾琖indows銆乁NIX鍜孷MS镄勭悊𨱍冲伐鍏枫傞氲繃浣跨敤鍐呭惈镄刅CP锻戒护琛岀▼搴忓彲浠ヨ繘琛屽姞瀵嗘枃浠剁殑浼犺緭
⑷ 运行在linux下的java程序,调用了命令行,如何让java线程等待命令行结束再执行
Process prc = runtime.exec(.....);
prc.waitFor();//这行就能阻塞后续代码的执行,直到你执行的命令结束。
⑸ java如何连接linux系统后台执行相应的命令
java提供的Runtime 这个类来执行系统命令的,用法如下:
1.得到Runtime对象。
public void execCommand(String command) throws IOException {
// start the ls command running
//String[] args = new String[]{"sh", "-c", command};
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //这句话就是shell与高级语言间的调用
//如果有参数的话可以用另外一个被重载的exec方法
//实际上这样执行时启动了一个子进程,它没有父进程的控制台
//也就看不到输出,所以需要用输出流来得到shell执行后的输出
2.得到输入流。
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
// read the ls output
String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append('\n');
}
//tv.setText(sb.toString());
//使用exec执行不会等执行成功以后才返回,它会立即返回
//所以在某些情况下是很要命的(比如复制文件的时候)
//使用wairFor()可以等待命令执行完成以后才返回
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
}
catch (InterruptedException e) {
System.err.println(e);
}
}
}
⑹ linux 怎么启动jar文件命令行
linux下执行jar文件方法:命令行下进入文件目录,执行java -jar file.jar即可,也可在桌面创建一个启动器,在命令栏填写相关的命令:java -jar /file路径/file.jar,这样在桌面双击即可打开该jar文件
创建可执行的 JAR 文件包详解:JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件--准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的.举个例子,如果我们具有如下目录结构的一些文件:
==
`-- test
`-- Test.class
把它压缩成 ZIP 文件 test.zip,则这个 ZIP 文件的内部目录结构为:
test.zip
`-- test
`-- Test.class
如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,则这个 JAR 文件的内部目录结构为:
test.jar
|-- META-INF
| `-- MANIFEST.MF
`-- test
`--Test.class
创建可执行的 JAR 文件包,需要使用带 cvfm 参数的 jar 命令,同样以上述 test 目录为例,命令如下:jar cvfm test.jar manifest.mf test,这里 test.jar 和 manifest.mf 两个文件,分别是对应的参数 f 和 m,其重头戏在 manifest.mf。因为要创建可执行的 JAR 文件包,光靠指定一个 manifest.mf 文件是不够的,因为 MANIFEST 是 JAR 文件包的特征,可执行的 JAR 文件包和不可执行的 JAR 文件包都包含 MANIFEST。关键在于可执行 JAR 文件包的 MANIFEST,其内容包含了 Main-Class 一项。这在 MANIFEST 中书写格式如下:Main-Class: 可执行主类全名(包含包名)
例如,假设上例中的 Test.class 是属于 test 包的,而且是可执行的类 (定义了 public static void main(String[]) 方法),那么这个 manifest.mf 可以编辑如下:Main-Class: test.Test ,这个 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且该行以一个回车符结束即可。创建了 manifest.mf 文件之后,我们的目录结构变为:
==
|-- test
| `-- Test.class
`-- manifest.mf
这时候,需要到 test 目录的上级目录中去使用 jar 命令来创建 JAR 文件包。也就是在目录树中使用==表示的那个目录中,使用如下命令:jar cvfm test.jar manifest.mf test
之后在==目录中创建了 test.jar,test.jar 就是执行的 JAR 文件包。运行时只需要使用 java -jar test.jar 命令即可。
需要注意的是,创建的 JAR 文件包中需包含完整的、与 Java 程序包结构对应的目录结构。而 Main-Class 指定的类,也必须是完整的、包含包路径的类名,如上例的 test.Test;而且在没有打成 JAR 文件包之前可以使用 java 来运行这个类,即在上例中 java test.Test 是可以正确运行的 (当然要在 CLASSPATH 正确的情况下)。