java -jar 和 java -cp


就是如果你使用了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。

原文地址:https://www.cnblogs.com/muzhongjiang/p/4538689.html