Maven將依賴多jar的專案打成一個可執行jar
阿新 • • 發佈:2019-01-28
利用maven的assembly外掛或者shade外掛可實現將依賴多個jar包的專案打成一個jar大jar包。
1、將專案依賴的多個jar打入maven倉庫中,例如
mvn install:install-file -DgroupId=com.bank -DartifactId=UnionNew -Dversion=1.0.0 -Dpackaging=jar -Dfile=d:/UnionNew.jar
注意,如果在pom依賴指定的jar包本地地址,編譯是沒問題,但生產的jar依舊是需要配合依賴的,也就是依賴的jar還需要和生成的jar放一起。
<dependency> <groupId>lib.kuppext</groupId> <artifactId>UnionNewx</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${basedir}/lib/bcprov-jdk14-119.jar</systemPath> </dependency>
取消上述引用,將jar打入倉庫後用下面的依賴:
<dependency>
<groupId>com.bank</groupId>
<artifactId>UnionNew</artifactId>
<version>1.0.0</version>
</dependency>
補充:若使用顯示依賴,即使用前一種指定依賴方式,不將jar打入maven倉庫,則需要配置assembly外掛屬性才能有相同效果:
<dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> </dependencySet> </dependencySets>
2、配置maven及程式碼工具jak及編碼格式,指定maven的外掛編譯jdk版本和java程式碼編譯版本,IDEA設定如下
以及pom指定如下:
<properties> <jdk.version>1.7</jdk.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> *******所需依賴****** </dependencies>
注意保持IDEA設定的專案jdk和編碼型別與此處保持一致,以避免其它錯誤。
3、設定assembly外掛屬性,以及其他plugin配置,進入專案根目錄後,執行mvn clean及mvn package及生成最終jar檔案。
pom.xml示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>szkingdom.kupp.tools</groupId>
<artifactId>kupp-tool-cmbcthird</artifactId>
<version>1.0.0</version>
<name>KUPP :: Adapter Plungin Module :: CMBCThird</name>
<packaging>jar</packaging>
<properties>
<jdk.version>1.7</jdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.bank</groupId>
<artifactId>baprov</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.bank</groupId>
<artifactId>UnionNew</artifactId>
<version>1.0.0</version>
</dependency>
<!--<dependency>-->
<!--<groupId>lib.kuppext</groupId>-->
<!--<artifactId>UnionNew</artifactId>-->
<!--<version>1.0</version>-->
<!--<scope>system</scope>-->
<!--<!–system,類似provided,需要顯式提供依賴的jar以後,Maven就不會在Repository中查詢它–>-->
<!--<systemPath>${basedir}/lib/UnionNew.jar</systemPath>-->
<!--<!–專案根目錄下的lib資料夾下–>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>lib.kuppext</groupId>-->
<!--<artifactId>UnionNewx</artifactId>-->
<!--<version>1.0</version>-->
<!--<scope>system</scope>-->
<!--<systemPath>${basedir}/lib/bcprov-jdk14-119.jar</systemPath>-->
<!--</dependency>-->
</dependencies>
<build>
<finalName>
${project.artifactId}-${project.version}
</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.szkingdom.kupp.tools.cmbcthird.CMBCEncFile</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>