java -cp 和 java -jar 的区别

墨蓝 2021-09-01 00:55 388阅读 0赞

目录

java -cp

java -jar

maven 打包


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的内容

  1. Manifest-Version: 1.0
  2. Main-Class: test.core.Core

maven 打包

1)用 maven 导出的包中,如果没有在pom文件中将依赖包打进去,没有依赖包。

  1. 打包时指定了主类,可以直接用java -jar xxx.jar
  2. 打包时没有指定主类,可以用java -cp xxx.jar 主类名称(绝对路径)
  3. 要引用其他的 jar 包,可以用java -classpath $CLASSPATH:xxx.jar 主类名称(绝对路径)。其中 -classpath 指定需要引入的类。

2)pom.xml 的 build 配置:

  1. <build>
  2. <!--<finalName>test-1.0-SNAPSHOT</finalName>-->
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-compiler-plugin</artifactId>
  7. <version>3.1</version>
  8. <configuration>
  9. <source>1.8</source>
  10. <target>1.8</target>
  11. </configuration>
  12. </plugin>
  13. <plugin>
  14. <artifactId>maven-assembly-plugin</artifactId>
  15. <configuration>
  16. <archive>
  17. <manifest>
  18. <mainClass>test.core.Core</mainClass>
  19. </manifest>
  20. </archive>
  21. <descriptorRefs>
  22. <descriptorRef>jar-with-dependencies</descriptorRef>
  23. </descriptorRefs>
  24. </configuration>
  25. <!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
  26. <executions>
  27. <execution>
  28. <id>make-assemble</id>
  29. <phase>package</phase>
  30. <goals>
  31. <goal>single</goal>
  32. </goals>
  33. </execution>
  34. </executions>
  35. </plugin>
  36. </plugins>
  37. </build>

3)下面基于 pomMETA-INF\MANIFEST.MF 两个文件的配置,进行了三种情况的测试

pom 中 build 指定 mainClass,但是 META-INF\MANIFEST.MF 文件中没有指定 Main-Class:test.core.Core

  1. java -jar test-jar-with-dependencies.jar //执行成功
  2. java -cp test-jar-with-dependencies.jar test.core.Core //执行失败,提示jar中没有主清单属性

pom 中 build 没有指定 mainClass,但是 META-INF\MANIFEST.MF文件中指定了 Main-Class:test.core.Core

  1. java -jar test-jar-with-dependencies.jar //执行失败,提示jar中没有主清单属性
  2. java -cp test-jar-with-dependencies.jar test.core.Core //执行成功

pom 中 build 指定 mainClass && META-INF\MANIFEST.MF 文件中添加了 Main-Class:test.core.Core

  1. java -cp test-jar-with-dependencies.jar test.core.Core //执行成功
  2. java -jar test-jar-with-dependencies.jar //执行成功

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读