java -cp 和 java -jar 的区别
2018-06-28 本文已影响142人
数据小白鼠
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 配置:
<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>
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 //执行成功
原文:https://blog.csdn.net/sunny05296/article/details/78268464