java -jar VS java -cp
前言
为啥子比BB这个 java -jar 和java -cp 这两种启动java程序的方式呢?
就是如果你使用了maven,使用了插件打包的方式的话,那么你就需要了解这俩用法的区别了。
结论
其实就是一句话,java -jar 和 java -cp 两种方式,如果动态传入执行类,就用-cp,固定执行类就用-jar。
java -jar 的方式必须要在 pom.xml 文件中指定主类,不可以指定一个主类,然后运行的时候在jar包后面继续指定主类。
java -jar maven_pro-1.0-SNAPSHOT-jar-with-dependencies.jar dtwave.odps.utils.UploadSample
java -cp 的方式不需要在 pom.xml 文件中指定主类,主类是否指定看自己需要,然后运行的时候在jar包后面继续指定主类。
java -cp maven_pro-1.0-SNAPSHOT-jar-with-dependencies.jar dtwave.odps.utils.UploadSample
问题的地方就是因为pom文件打包配置的问题,mainClass是否指定的问题。
pom.xml
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass></mainClass>
<!-- <mainClass>dtwave.odps.utils.UploadSample</mainClass>-->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
验证结果
原因分析
解压打包后的包,展开查看META-INF/MANIFEST.MF 的文件
详细的细节这个哥们的博客写的有,我就不搬砖。可以参考_地址:https://blog.csdn.net/weixin_38653290/article/details/84647019
解决方案
个人建议:如果maven打包后的jar包,只有一个可执行的主类的话,那么就可以用-jar的方式,如果有多个主类,想执行哪个执行哪个,那就用-cp的方式去手动指定就好了~