共计 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 // 执行成功