共计 2041 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar 包之类,需要全路径到 jar 包,window 上分号“;” |
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 myClass.jar |
执行该命令时,会用到目录 META-INF\MANIFEST.MF 文件,在该文件中,有一个叫 Main-Class 的参数,它说明了 java -jar 命令执行的类。
用 maven 导出的包中,如果没有在 pom 文件中将依赖包打进去,是没有依赖包。
1. 打包时指定了主类,可以直接用java -jar xxx.jar。
2. 打包是没有指定主类,可以用 j ava -cp xxx.jar 主类名称(绝对路径)。
3. 要引用其他的 jar 包,可以用 java -classpath $CLASSPATH:xxxx.jar 主类名称(绝对路径)。其中 -classpath 指定需要引入的类。
下面基于 pom 和 META-INF\MANIFEST.MF 两个文件的配置,进行了三种情况的测试:
pom.xml 的 build 配置:
<build> | |
<!--<finalName>test-1.0-SNAPSHOT</finalName>--> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-compiler-plugin</artifactId> | |
<version>3.1</version> | |
<configuration> | |
<source>1.8</source> | |
<target>1.8</target> | |
</configuration> | |
</plugin> | |
<plugin> | |
<artifactId>maven-assembly-plugin</artifactId> | |
<configuration> | |
<archive> | |
<manifest> | |
<mainClass>test.core.Core</mainClass> | |
</manifest> | |
</archive> | |
<descriptorRefs> | |
<descriptorRef>jar-with-dependencies</descriptorRef> | |
</descriptorRefs> | |
</configuration> | |
<!-- 下面是为了使用 mvn package 命令,如果不加则使用 mvn assembly--> | |
<executions> | |
<execution> | |
<id>make-assemble</id> | |
<phase>package</phase> | |
<goals> | |
<goal>single</goal> | |
</goals> | |
</execution> | |
</executions> | |
</plugin> | |
</plugins> | |
</build> |
META-INF\MANIFEST.MF 的内容:
Manifest-Version: 1.0 | |
Main-Class: test.core.Core |
1.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 中没有主清单属性 |
2.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 // 执行成功 |
3.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 // 执行成功 |
