就是如果你使用了maven,使用了插件打包的方式的话,那么你就需要了解这俩用法的区别了。
java -jar | 必须要在 pom.xml 文件中指定主类,不可以指定一个主类,然后运行的时候在jar包后面继续指定主类 |
java -cp | 不需要在 pom.xml 文件中指定主类,主类是否指定看自己需要,然后运行的时候在jar包后面继续指定主类。 |
例如:
java -jar maven_pro-1.0-SNAPSHOT-jar-with-dependencies.jar dtwave.odps.utils.UploadSample java -cp maven_pro-1.0-SNAPSHOT-jar-with-dependencies.jar dtwave.odps.utils.UploadSample
问题的地方就是因为pom文件打包配置的问题,mainClass是否指定的问题。
<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>
结论
java -jar 和 java -cp 两种方式,如果动态传入执行类,就用-cp,固定执行类就用-jar。