java -cp與java -jar



java -cp與java -jar


java -cp(或java -classpath)

指定執行運行依賴jar和主類,需要絕對路徑。指定多個jar時,linux用“:”分隔,windows“;”分隔。也可以用全稱-classpath。支持通配符 “ * ”。java -cp classpath,-cp后面是類路徑,解釋器會到指定路徑下查找class文件。
格式 java -cp .;myClass.jar packagename.mainclassname
例如
java -cp .;c:/classes/myClass.jar;d:/classes/*.jar packagename.mainclassname
java -cp D:\spark\spark-2.3.3\assembly\target\scala-2.11\jars\* org.apache.spark.deploy.master.Master
classpath中的jar文件可以使用通配符。
packagename.mainclassname為包含mian方法的完全限定類名,如果classpath中有多個具有main方法的類,通過-cp可以方便的選定程序的入口。
使用-jar選項,java.exe會忽略-cp、-classpath以及環境變量CLASSPATH的參數。

java -jar

指定運行的jar,會用到打包時的生成的META-INF下的MANIFEST.MF文件,其中Main-Class指定了主類。不能再指定其他依賴jar。ava -jar myClass.jar,執行該命令時,會用到目錄META-INF\MANIFEST.MF文件,在該文件中,有一個叫Main-Class的參數,它說明了java -jar命令執行的類。
格式 java -jar myClass.jar
例如
java -jar myClass.jar
java -jar E:\workspace\idmapping\target\idmapping-1.0-SNAPSHOT.jar


指定main-class的兩種方式

  1. Maven打包時在pom.xml的build中指定main-class
  2. 在META-INF\MANIFEST.MF文件中指定
  • 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>packagename.mainclassname</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>
  • META-INF\MANIFEST.MF文件中指定:
Manifest-Version: 1.0
Main-Class: packagename.mainclassname

用maven導出的包中,如果沒有在pom文件中將依賴包打進去,是沒有依賴包。
1.打包時指定了主類,可以直接用java -jar xxx.jar。
2.打包是沒有指定主類,可以用java -cp xxx.jar 主類名稱(絕對路徑)。
3.要引用其他的jar包,可以用java -classpath $CLASSPATH:xxxx.jar 主類名稱(絕對路徑)。其中 -classpath 指定需要引入的類。


參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM