Maven JAR Plugin 插件使用說明
- 1 Maven JAR Plugin 插件地址
- 2 Maven JAR Plugin 特點
- 3 maven-assembly-plugin 的用法
- 3.1 無依賴項 maven-jar-plugin 配置
- 3.2 有依賴項 maven-jar-plugin 配置
- 3.3 配合maven-dependency-plugin 將依賴復制到指定位置
1 Maven JAR Plugin 插件地址
https://maven.apache.org/plugins/maven-jar-plugin/index.html
2 Maven JAR Plugin 特點
maven-assembly-plugin: maven 生命周期 package 階段的默認打包插件,用于將 Maven 項目打包成jar(注意該插件不會將項目中引入的依賴打進最終的 Jar 文件)
3 maven-assembly-plugin 的用法
3.1 無依賴項 maven-jar-plugin 配置
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version><configuration><archive><manifest><!--主類入口--><mainClass>com.yq.Main</mainClass></manifest></archive></configuration></plugin></plugins>
</build>
以上配置是打包成可執行jar包,
如果打包成不可執行的jar包,只需不配置 mainClass 即可,如果打包成不可執行jar包,都可以不配置maven-jar-plugin插件,maven-jar-plugin 是maven 生命周期 package 階段的默認打包插件。
3.2 有依賴項 maven-jar-plugin 配置
文章最開始已經說過,通過 maven-jar-plugin 生成 Jar 文件時,不會將依賴包函進去;因此需要配置依賴項所在位置
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version><configuration><archive><manifest><!--主類入口--><mainClass>com.yq.Main</mainClass><!--將項目的依賴位置添加到 MANIFEST.MF 中的Class-Path--><addClasspath>true</addClasspath><!--依賴的存放位置 和生成的jar放在同一級目錄下--><classpathPrefix>lib/</classpathPrefix><!--是否使用-SNAPSHOT 命名版本。默認值為true--><useUniqueVersions>false</useUniqueVersions></manifest></archive></configuration></plugin>
上述配置生成的 MANIFEST.MF 中多了依賴的信息:
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.4.2
Build-Jdk-Spec: 17
Class-Path: lib/hutool-all-5.8.39.jar
Main-Class: com.yq.Main
實際并沒有下載依賴到lib 目錄,需要借助maven-dependency-plugin插件下載依賴到lib目錄
3.3 配合maven-dependency-plugin 將依賴復制到指定位置
它可以從本地或遠程存儲庫復制或解壓構件到指定位置
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.8.1</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory><!-- 間接依賴也拷貝 --><excludeTransitive>false</excludeTransitive><!-- 依賴帶上版本號 --><stripVersion>false</stripVersion><!--覆蓋發布工件--><overWriteReleases>false</overWriteReleases><!--覆蓋快照項目--><overWriteSnapshots>false</overWriteSnapshots><!--覆蓋不存在或比源文件更舊的構建產物--><overWriteIfNewer>true</overWriteIfNewer></configuration></execution></executions></plugin>