Maven 配置文件 POM 的常用插件配置代码
Maven 配置文件 POM 的常用插件配置代碼
- 普通
- 將 Maven 多模塊依賴集成打進一個 JAR 包(方法 1)
- 將 Maven 多模塊依賴集成打進一個 JAR 包(方法 2)
- 生成單入口類 JAR 包
- 生成完整依賴單 JAR 包
- 導出資源文件
- Spring Boot
- 制作 JAR 包
- JavaFX
- 添加在命令行運行 JavaFX 應用的功能
【說明】
-
本文只是關于 Maven 中的插件(plugin)的 POM 代碼。
-
關于 Maven 的常用依賴配置代碼,可見筆者的另一篇博客:
Maven 配置文件 POM 的常用依賴配置代碼:
https://blog.csdn.net/wangpaiblog/article/details/112797500
普通
運行環境
-
JDK 17
-
Maven 3.6.3
-
IntelliJ IDEA 2021.2.2 (Ultimate Edition)
將 Maven 多模塊依賴集成打進一個 JAR 包(方法 1)
??此插件可以用于在 Maven 當前模塊中生成本模塊的 JAR 包,其中,此 JAR 包含了本模塊直接或間接依賴的所有 JAR 包,及它們直接或間接依賴的所有資源文件。如果不在父 POM 使用該插件,則需要提前將此模塊依賴的其它模塊手動安裝至 Maven 倉庫中,所以建議在父 POM 中使用該插件。
??如果遇到 Maven 多模塊中各自的模塊有同名同路徑的資源文件這種情況,此時打包時只會保留其中的一個。更詳細的信息,可見筆者的另一篇博客:
??將 Maven 中的多模塊項目只打成一個 JAR 包:
https://blog.csdn.net/wangpaiblog/article/details/119628194?spm=1001.2014.3001.5501
??使用該插件的命令為:mvn package assembly:single。
<project xmlns=...><build><plugins><!-- 此插件必須放在父 POM 中 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><executions><!--執行本插件的方法為,在主目錄下執行如下命令:mvn package assembly:single對于 IntelliJ IDEA,生成的 JAR 包位于每個模塊下的文件夾 target--><execution><id>make-assembly</id><phase>package</phase><goals><!-- 此處 IntelliJ IDEA 可能會報紅,這是正常現象 --><goal>single</goal></goals></execution></executions><configuration><archive><manifest><!-- 配置程序運行入口所在的類 --><mainClass>包名.類名</mainClass></manifest></archive><!-- 設置 JAR 包輸出目錄 --><outputDirectory>${project.build.directory}/#maven-assembly-plugin</outputDirectory><!-- 設置打包后的 JAR 包的目錄結構為默認 --><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins></build></project>將 Maven 多模塊依賴集成打進一個 JAR 包(方法 2)
??此插件可以用于在 Maven 當前模塊中生成本模塊的 JAR 包,其中,此 JAR 包含了本模塊直接或間接依賴的所有 JAR 包,及它們直接或間接依賴的所有資源文件。如果不在父 POM 使用該插件,則需要提前將此模塊依賴的其它模塊手動安裝至 Maven 倉庫中,所以建議在父 POM 中使用該插件。
??如果遇到 Maven 多模塊中各自的模塊有同名同路徑的資源文件這種情況,此時打包時只會保留其中的一個。更詳細的信息,可見筆者的另一篇博客:
??將 Maven 中的多模塊項目只打成一個 JAR 包:
https://blog.csdn.net/wangpaiblog/article/details/119628194?spm=1001.2014.3001.5501
??使用該插件的命令為:mvn package。
<project xmlns=...><build><plugins><!-- 此插件必須放在父 POM 中 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><!--設置將依賴整合到一個自定義名稱的 JAR 包。如果不設置此項,依賴將整合到 Maven 無插件時的默認 JAR 包,并生成一個前綴為 original- 的無依賴 JAR 包--><shadedArtifactAttached>true</shadedArtifactAttached><!-- 設置生成的 JAR 包后綴名 --><shadedClassifierName>shaded-with-dependencies</shadedClassifierName><!-- 設置程序運行入口 --><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>包名.類名</mainClass></transformer></transformers><!-- 設置 JAR 包輸出目錄 --><outputDirectory>${project.build.directory}/#maven-shade-plugin</outputDirectory></configuration></execution></executions></plugin></plugins></build></project>生成單入口類 JAR 包
??此插件可以用于在 Maven 當前模塊中生成單入口類 JAR 包。利用此插件生成的 JAR 包,只包含當前模塊的文件(包含本模塊下的資源文件),雖然不包含任何依賴,但其中設置了程序運行入口類、依賴 JAR 包的相對路徑。可以通過將依賴 JAR 包放入指定目錄,然后僅通過本 JAR 包(無需在命令行中指定依賴包路徑)來運行 Java 應用。因此,本插件一般在程序入口模塊使用。本插件往往與插件 maven-dependency-plugin 一起配合使用。
<project xmlns=...><build><plugins><!--此插件可以用于在當前模塊中生成單入口類 JAR 包。此插件往往與插件 maven-dependency-plugin 一起配合使用--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><!-- 配置程序運行入口所在的類 --><mainClass>包名.類名</mainClass><!--設置程序的 ClassPath 路徑。這指的是在命令行中 java -cp XXX 中 -cp 參數的內容。也就是說,此項為依賴 JAR 包目錄。如果設置了此項,且之后把依賴 JAR 包全部放入目錄 lib/ 下,然后就可以直接使用 java -jar XXX.jar 來運行本 JAR 包,而無需在命令中指定依賴--><classpathPrefix>lib/</classpathPrefix><addClasspath>true</addClasspath></manifest></archive><!-- 設置 JAR 包輸出目錄 --><outputDirectory>${project.build.directory}/#maven-jar-plugin</outputDirectory></configuration></plugin></plugins></build></project>生成完整依賴單 JAR 包
??此插件可以用于在 Maven 當前模塊中生成完整的依賴單 JAR 包。完整指的是對于本模塊直接或間接依賴的 JAR 包都會生成,且這些 JAR 包還各自包含了它們所屬模塊的資源文件。單 JAR 包指的是生成各依賴包之間互相沒有交集(沒有重復依賴)。但不生成本模塊自身的 JAR 包,所以在此插件的設置中無需設置程序運行入口類。本插件往往與插件 maven-jar-plugin 一起配合使用。
<project xmlns=...><build><plugins><!--此插件是用于生成該模塊所直接和間接引用的所有依賴。但生成的不包括自身的 JAR 包,所以在此插件的設置中無需設置程序運行入口類。此插件可在生命周期 package 中被執行。此插件往往與插件 maven-jar-plugin 一起使用--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.2.0</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!-- 設置 JAR 包輸出目錄 --><outputDirectory>${project.build.directory}/#maven-jar-plugin/lib</outputDirectory><overWriteReleases>true</overWriteReleases><overWriteSnapshots>true</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope></configuration></execution></executions></plugin></plugins></build></project>導出資源文件
??此插件可以用于在 Maven 當前模塊中導出本模塊所需的資源文件。但生成的資源文件只包含本模塊的資源文件,不包括其依賴的其它模塊的資源文件,因此作用有限。此插件往往與插件 maven-jar-plugin、maven-dependency-plugin 一起使用。此插件建議放在父 POM 中使用。
<project xmlns=...><build><plugins><!--此插件是用于拷貝該模塊的資源文件指指定目錄。但生成的資源文件只包含本模塊的資源文件,不包括其依賴的其它模塊的資源文件此插件可在生命周期 package 中被執行。此插件往往與插件 maven-jar-plugin、maven-dependency-plugin 一起使用此插件建議放在父 POM 中--><plugin><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><executions><execution><id>copy-resources</id><!-- 設置此插件執行的階段,可更改為其它階段 --><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><!-- 設置資源文件輸出目錄 --><outputDirectory>${project.build.directory}/#maven-resources-plugin</outputDirectory><resources><resource><!-- 設置原資源文件所在目錄 --><directory>src/main/resources</directory></resource></resources></configuration></execution></executions></plugin></plugins></build></project>Spring Boot
制作 JAR 包
??對于 Spring Boot 項目,使用常規的生成 JAR 包的插件會引發很多問題,因此,對于它們應該使用如下插件。
<project xmlns=...><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>【注意事項】
-
使用此插件的 Maven 模塊,必須直接或間接繼承至 Spring Boot 模塊。也就是說,此模塊或其直接或間接父模塊需要添加如下繼承代碼。
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>Spring Boot 的版本</version> </parent>- 如果不這么做,使用本插件打包成 JAR 后運行時會有遇到各種問題,如本插件失效,從而打包時不包含依賴等等。
- 如果不這么做,而選擇普通方法(將 Spring Boot 視為常規依賴項,然后使用其它插件進行打包),打包成 JAR 后運行時會有遇到各種問題,如運行時提示缺失 Spring Boot 的一些配置文件等等。
-
本項目的入口類被 Spring Boot 認為是擁有注解 @SpringBootApplication 的類。
-
只有有 Spring Boot 入口類的模塊才能運行本插件。另外,如果使用本插件的模塊有多于一個的 Spring Boot 入口類,打包時會報錯。
-
當使用了此插件制作 JAR 包后,程序的啟動類會變成 org.springframework.boot.loader.JarLauncher。
JavaFX
運行環境:
-
JDK 17
-
JavaFX 17-ea+11
-
Maven 3.6.3
-
IntelliJ IDEA 2020.2.2 (Ultimate Edition)
添加在命令行運行 JavaFX 應用的功能
<project xmlns=...><build><plugins><!-- 在本目錄下,使用命令 mvn javafx:run 來運行此插件 --><plugin><groupId>org.openjfx</groupId><artifactId>javafx-maven-plugin</artifactId><version>0.0.6</version><executions><execution><id>default-cli</id><configuration><mainClass>包名.類名</mainClass></configuration></execution></executions></plugin></plugins></build></project>總結
以上是生活随笔為你收集整理的Maven 配置文件 POM 的常用插件配置代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决‘C:\Program‘ 不是内部或
- 下一篇: JavaFX 中使用多线程与保证 UI