1. 程式人生 > >Maven打包可支援jar包的幾種方式

Maven打包可支援jar包的幾種方式

Maven打包可執行Jar的幾種方法

一、無依賴其他任何jar

<build>
<finalName>DtuServer-alone</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.think.TestMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>

執行:mvn clean package,在target中找到打包出來的,命令後執行java -jar xxx.jar即可,但是如果程式有依賴其他包,比如程式依賴jdbc去查詢db,這時候再執行就會出現找不到jdbc依賴,因為我們並沒有將依賴包打進去

二、解決依賴其他包時,可執行jar的打包

<build>
<finalName>DtuServer-alone</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.carson.cloud.NettyServer</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

但以上方式用的比較少,因為我們依賴的jar,也會打進到我們最終生成的jar,這樣不太好,假如你生成的jar要給別人使用,最好給一個純淨的。

三、可執行jar的打包

<build>
<finalName>DtuServer-alone</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.carson.cloud.NettyServer</mainClass>
</transformer>
<!--<transformer -->
<!--implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> -->
<!--<resource>applicationContext.xml</resource> -->
<!--</transformer> -->
</transformers>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>all</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

最終執行命令:mvn clean package,執行jar包明亮如下:jar -jar XXX.jar.

我們可以根據不同需要來打包,如果暴露給外面,可以採用第三種。