maven工程打包jar以及java jar命令的classpath使用

1、maven工程打包成jar文件插件。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <archive>
            <manifest>
                <mainClass>com.wjl.Main</mainClass>
                <!--
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix> 
                -->
            </manifest>
        </archive>
    </configuration>
</plugin>

2、打包完工程的jar和依賴都在同一目錄。

圖片描述

(1)若是經過maven打包時,指定了<addClasspath>且正確。其效果徹底等價於其餘打包方式,本身在MANIFEST.MF指定好了Class-Path。
此時,運行的命令,直接運行jar包便可。java

java -jar hello-test-0.0.1-SNAPSHOT.jar

(2)若是沒有指定<addClasspath>和<classpathPrefix>,或者手動設置MANIFEST.MF。此時,即使依賴的jar包都在相同目錄下,指定運行的classpath。
這個時候,容易想固然,把命令錯誤的寫成:apache

//錯誤展現
java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar -jar hello-test-0.0.1-SNAPSHOT.jar

實際上正確的寫法應該是:app

java -cp jackson-core-asl-1.9.4.jar:jackson-mapper-asl-1.9.4.jar:hello-test-0.0.1-SNAPSHOT.jar  com.wjl.Main

經過指定當前目錄的方式,能夠縮寫爲:maven

java -cp ./*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main

3、若是運行的jar和依賴不在同一目錄。

圖片描述

這個狀況簡單就是maven插件指定了<addClasspath>爲true,同時指定了<classpathPrefix>。
這樣生成的MANIFEST.MF的classpath,都會在每一個jar包的路徑上帶上prefix,使得java命令能夠找到。spa

若是沒有這樣配置,那麼就要在運行命令時,指定classpath了,命令以下:插件

java -cp lib/*:hello-test-0.0.1-SNAPSHOT.jar com.wjl.Main

4、maven插件把依賴的全部jar包找出來

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-rar-plugin</artifactId>
    <version>2.4</version>
</plugin>

配置該插件,而後須要執行命令 mvn rar:rar 。code

相關文章
相關標籤/搜索