maven 學習筆記(五)之 maven-jar-plugin
阿新 • • 發佈:2020-09-17
maven-jar-plugin 這個外掛通常用法是將maven工程打成 jar 包,但是還有其它用法。
1、生成可執行 jar 包
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest><!--是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!--生成的manifest中classpath的字首,
因為要把第三方jar放到lib目錄下,
所以classpath的字首是lib/--> <classpathPrefix>lib/</classpathPrefix><!-- 執行的主程式路徑 --> <mainClass>com.example.demo.test.App</mainClass> </manifest> </archive> </configuration> </plugin>
打包出來的包的資料結構如下:
開啟 MENIFEST.MF 檔案可以看到如下內容:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: sandy Class-Path: lib/gson-2.8.5.jar lib/guava-19.0.jar lib/slf4j-api-1.7.25 .jar lib/logback-core-1.2.3.jar lib/logback-access-1.2.3.jar lib/logb ack-classic-1.2.3.jar lib/lombok-1.18.2.jar lib/commons-lang3-3.8.1.j ar lib/commons-io-2.2.jar //表示依賴的第三方jar包在哪裡,顯然需要放在和 當前jar包同級目錄下的 lib資料夾下 Created-By: Apache Maven 3.5.2 Build-Jdk: 1.8.0_121 Main-Class: com.example.demo.test.App //表示執行的主程式
所以安裝包的路徑結構應該是:
為此需要 通過 maven-assembly-plugin 外掛來組裝出安裝包。
針對本示例 對應的 maven-assembly-plugin 配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> //和 pom.xml 同級目錄下 </descriptors> <outputDirectory>output</outputDirectory> //和 pom.xml同級目錄下,assembly 組裝出來的包會被放置在output目錄下 </configuration> </plugin>
assembly.xml 內容如下:
<?xml version='1.0' encoding='UTF-8'?> <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <id>consul-consumer-demo</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}</directory> //${project.build.directory} 指 target目錄 <outputDirectory>/</outputDirectory> //表示輸出到 pom 中配置的 output目錄下 <includes> <include>consul-product.jar</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}/classes</directory> <outputDirectory>/config</outputDirectory> //表示輸出到 pom 中配置的 output/config 目錄下 <includes> <include>application.properties</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}</directory> //${project.basedir} 指 工程根目錄 <outputDirectory>/</outputDirectory> <includes> <include>script/*.*</include> </includes> </fileSet> </fileSets> </assembly>
2、打出來的 jar 包可以指定 jar名稱
在不指定jar包名稱的時候,通常見的jar包名稱是:artifactId-version.jar
要自定義 jar 包名稱,可以直接在 pom.xml 中 build 結點下設定 finalName,如:
<build> <finalName>p-test-tool</finalName> </build>