java -cp
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库、jar 包之类,需要全路径到 jar 包,多个依赖在Window 上用分号";"隔开。
格式:
java -cp .;myClass.jar packname.mainclassname
表达式支持通配符,例如:
java -cp .;c:\classes01\myClass.jar;c:\classes02\*.jar packname.mainclassname
java -jar
java -jar 执行命令时,会用到目录META-INF\MANIFEST.MF文件,在该文件中,有一个叫Main-Class的参数,他说明了 java -jar 命令执行的类。
META-INF\MANIFEST.MF的内容
Manifest-Version: 1.0
Main-Class: test.core.Core
Maven 打包
1)用 maven 导出的包中,如果没有在pom文件中将依赖包打进去,没有依赖包。
打包时指定了主类,可以直接用java -jar xxx.jar。
打包时没有指定主类,可以用java -cp xxx.jar 主类名称(绝对路径)
要引用其他的 jar 包,可以用java -classpath $CLASSPATH:xxx.jar 主类名称(绝对路径)。其中 -classpath 指定需要引入的类。
2)pom.xml 的 build 配置:
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
1.8
maven-assembly-plugin
test.core.Core
jar-with-dependencies
make-assemble
package
single
3)下面基于 pom 和 META-INF\MANIFEST.MF 两个文件的配置,进行了三种情况的测试
pom 中 build 指定 mainClass,但是 META-INF\MANIFEST.MF 文件中没有指定 Main-Class:test.core.Core
java -jar test-jar-with-dependencies.jar //执行成功
java -cp test-jar-with-dependencies.jar test.core.Core //执行失败,提示jar中没有主清单属性
pom 中 build 没有指定 mainClass,但是 META-INF\MANIFEST.MF文件中指定了 Main-Class:test.core.Core
java -jar test-jar-with-dependencies.jar //执行失败,提示jar中没有主清单属性
java -cp test-jar-with-dependencies.jar test.core.Core //执行成功
pom 中 build 指定 mainClass && META-INF\MANIFEST.MF 文件中添加了 Main-Class:test.core.Core
java -cp test-jar-with-dependencies.jar test.core.Core //执行成功
java -jar test-jar-with-dependencies.jar //执行成功
本文详细介绍了Java中的类路径(classpath)和使用java-jar命令执行jar包的原理,包括如何设置classpath,如何处理多个依赖,以及在maven打包时如何指定主类。通过示例展示了当pom.xml和MANIFEST.MF文件中主类配置不一致时,对jar执行的影响。

239

被折叠的 条评论
为什么被折叠?



