maven外掛詳解
阿新 • • 發佈:2018-11-25
一、maven-jar-plugin外掛詳解
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <!-- 生成的jar中,包含pom.xml和pom.properties這兩個檔案 --> <addMavenDescriptor>true</addMavenDescriptor> <!-- 生成MANIFEST.MF的設定 --> <manifest> <!--這個屬性特別關鍵,如果沒有這個屬性,有時候我們引用的包maven庫 下面可能會有多個包,並且只有一個是正確的,其餘的可能是帶時間戳的, 此時會在classpath下面把那個帶時間戳的給新增上去,然後我們 在依賴打包的時候,打的是正確的,所以兩頭會對不上,報錯。--> <useUniqueVersions>false</useUniqueVersions> <!-- 為依賴包新增路徑, 這些路徑會寫在MANIFEST檔案的Class-Path下 --> <addClasspath>true</addClasspath> <!-- 這個jar所依賴的jar包新增classPath的時候的字首,如果這個 jar本身和依賴包在同一級目錄,則不需要新增 --> <classpathPrefix>lib/</classpathPrefix> <!-- jar啟動入口類 --> <mainClass>com.ht.pojo.Test</mainClass> </manifest> <manifestEntries> <!-- 在Class-Path下新增配置檔案的路徑 --> <Class-Path>../config/</Class-Path> <!-- 假如這個專案可能要引入一些外部資源,但是你打包的時候並不想把 這些資原始檔打進包裡面,這個時候你必須在這邊額外指定一些這些資源 檔案的路徑,這個位置指定的話,要根據你預期的這些位置去設定,我這邊 所有jar都在lib下,資原始檔都在config下,lib和config是同級的 同時還需要注意另外一個問題,假如你的pom檔案裡面配置了<scope>system</scope>,就是你依賴是你本地的資源,這個時候使用 這個外掛,classPath裡面是不會新增,所以你得手動把這個依賴新增進 這個地方,用空格隔開就行 --> </manifestEntries> </archive> <!-- jar包的位置 --> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includes> <!-- 打jar包時,打包class檔案和config目錄下面的 properties檔案--> <!-- 有時候可能需要一些其他檔案,這邊可以配置,包括剔除的檔案等等 --> <include>**/*.class</include> <include>**/*.properties</include> </includes> </configuration> </plugin>
使用clean package命令打包成功後,目錄結構如下所示:
開啟meventest-0.0.1-SNAPSHOT.jar檔案,檢視打包成功後的專案結構
二、maven-dependency-plugin
說明:該外掛可以把依賴的jar包,打包到專案的指定目錄中
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-dependency-plugin</artifactId> 4 <executions> 5 <execution> 6 <id>copy-dependencies</id> 7 <phase>package</phase> 8 <goals> 9 <goal>copy-dependencies</goal> 10 </goals> 11 <configuration> 12 <!-- 拷貝專案依賴包到lib/目錄下 --> 13 <outputDirectory>${project.build.directory}/lib</outputDirectory> 14 <!-- 間接依賴也拷貝 --> 15 <excludeTransitive>false</excludeTransitive> 16 <!-- 帶上版本號 --> 17 <stripVersion>false</stripVersion> 18 </configuration> 19 </execution> 20 </executions> 21 </plugin>
打包後的目錄結構如下所示:
三、maven-assembly-plugin
- 該外掛可以把專案依賴的jar包編譯成class檔案,以包的形式生成在專案中
- 將Assembly外掛的assembly:single加入到Maven的package階段
1 <plugin> 2 <artifactId>maven-assembly-plugin</artifactId> 3 <version>3.1.0</version> 4 <configuration> 5 <archive> 6 <manifest> 7 <mainClass>com.ht.pojo.Test</mainClass> 8 </manifest> 9 </archive> 10 <descriptorRefs> 11 <descriptorRef>jar-with-dependencies</descriptorRef> 12 </descriptorRefs> 13 </configuration> 14 <executions> 15 <execution> 16 <id>make-assembly</id> 17 <phase>package</phase> 18 <goals> 19 <goal>single</goal> 20 </goals> 21 </execution> 22 </executions> 23 </plugin>
打包成功後會生成meventest-0.0.1-SNAPSHOT-jar-with-dependencies.jar檔案,這個jar包中包含依賴的編譯後的jar檔案、meventest-0.0.1-SNAPSHOT.jar不包含。
meventest-0.0.1-SNAPSHOT-jar-with-dependencies.jar開啟後的目錄如下所示:
四、maven-bundle-plugin
- 該外掛可以把專案依賴的jar包打包到專案的根目錄,前提是必須加上必須加上<Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>這個配置
1 <groupId>com.ht.maventest</groupId> 2 <artifactId>meventest</artifactId> 3 <version>0.0.1-SNAPSHOT</version> 4 <!-- 必須加上packaging這個節點 --> 5 <packaging>bundle</packaging> 6 7 8 <plugin> 9 <groupId>org.apache.felix</groupId> 10 <artifactId>maven-bundle-plugin</artifactId> 11 <version>3.2.0</version> 12 <extensions>true</extensions> 13 <configuration> 14 <instructions> 15 <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency> 16 </instructions> 17 <archive> 18 <manifestEntries> 19 <Bundle-ManifestVersion>2</Bundle-ManifestVersion> 20 <Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name> 21 <Bundle-SymbolicName>${project.groupId}.${project.artifactId} 22 </Bundle-SymbolicName> 23 <Bundle-Version>${project.version}</Bundle-Version> 24 <Bundle-Vendor>${project.groupId}</Bundle-Vendor> 25 <Bundle-Activator>com.ht.pojo.Activator</Bundle-Activator> 26 <Export-Package>com.ht.pojo</Export-Package> 27 <Import-Package>org.osgi.framework</Import-Package> 28 </manifestEntries> 29 </archive> 30 </configuration> 31 </plugin>
打包成功後的解壓目錄如下所示: