手动执行java命令的四种方法总结(类,jar包的手动执行)

时间:2022-04-28 08:14:16

1.最常用的一种方式:java 全限定名

//源代码:

package com.zizhu;

public class Hello {

public static void main(String args[]){
System.out.println("Hello,World!! java command");
}

}

java com.zizhu.Hello

当然,如果你使用的IDE,例如eclipse,那么你必须先切换到bin目录下:

cd D:\Java\WorkSpace\Hello\bin
D:
java com.zizhu.Hello

2.如果Hello.java依赖与某个jar包,该怎么执行?例如Hello依赖于log4j.jar包

//源代码:

package com.zizhu;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Hello {

private static Log log = LogFactory.getLog(Hello.class);

public static void main(String args[]){
log.debug("Hello,World!! java command");
}

}

此时,bin目录下新建一个lib包,把log4j.jar和commons-loggin.jar放进去,执行如下命令:

cd D:\Java\WorkSpace\Hello\bin
D:
java -classpath lib/commons-logging-1.0.4.jar;lib/log4j-1.2.16.jar; com.zizhu.Hello

注意点:jar后面必须要有分号,否则,肯定执行不了;如果执行不了,我的建议是把jar包名字改了,版本号去掉,尽量别包含特殊字符,这样更容易成功,至少spring的jar包全称跟上我从来没有执行成功过,但把名字变短,没有".",没有特殊字符之后,一下就成功了

3.java命令执行jar包(包含main函数):

//源代码:

package com.zizhu;

public class Hello {

//private static Log log = LogFactory.getLog(Hello.class);

public static void main(String args[]){
//log.debug("Hello,World!! java command");
System.out.println("command: java -jar test.jar");
}

}

a.首先需要将这个类打成jar包:

cd D:\Java\WorkSpace\Hello\bin
D:
jar cvf test.jar *

b.然后用WinRAR软件打开jar包,找到/META-INF下的清单文件,添加属性:

Main-Class: com.zizhu.Hello
注意点:1.Main-Class:冒号后面一定要空格,不然不行的;2.com.zizhu.Hello后面一定要回车,不然也不行;那么最后的这个清单文件应该是这样的:

Manifest-Version: 1.0
Created-By: 1.6.0_24 (Sun Microsystems Inc.)
Main-Class: com.zizhu.Hello
com.zizhu.Hello后面这个回车没有显示出来,但一定需要添加,否则,必定执行不了,至少我测出来就是执行不了;添加好之后,保存,WinRAR会提示覆盖原来的清单文件,确定就行了

c.执行这个jar文件:

java -jar test.jar

4.如果自己打包的这个jar文件还依赖其他的jar包,该怎么执行?

//源代码:

package com.zizhu;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Hello {

private static Log log = LogFactory.getLog(Hello.class);

public static void main(String args[]){
log.debug("command: java -jar test.jar");
}

}

当然首先还是将Hello类打包,然后修改清单文件:

添加Main-Class属性和Class-Path属性:

Manifest-Version: 1.0
Created-By: 1.6.0_24 (Sun Microsystems Inc.)
Main-Class: com.zizhu.Hello
Class-Path: lib/log4j.jar lib/commons-logging.jar

同样,该空格的地方空格,该回车的地方回车,最后覆盖,跟3的步骤一样,最后执行
java -jar test.jar

四种执行java类,jar包的方式基本结束,当然还有自定义加载器,可以参考我另一篇文章,成功的将web程序的某一部分业务转换成了windows本地任务,而这个web程序的业务逻辑使用了spring的jar包,hibernate的jar包,总共在WEB-INF/lib下一共有71个jar包,都是使用自定义加载器加载,然后利用反射成功调用web的业务逻辑,也是手动执行java命令,手动执行,详情参见: 自定义ClassLoader详解_将web程序部分业务转化到本地程序执行