SpringBoot項目構建Maven標簽及屬性用法詳解
一、序言
在 Spring Boot 項目中,Maven 是最常用的構建工具之一。通過 Maven,我們可以輕松地管理項目的依賴、構建流程和插件。本文將詳細介紹 Maven 依賴管理中的主要標簽及其使用方法,幫助開發(fā)者更好地理解和使用 Maven 構建工具。
二、Maven標簽介紹
在 Maven 項目中,用于描述項目信息的標簽通常位于 pom.xml
文件的<project>
根元素下。這些標簽幫助 Maven 構建工具和其他開發(fā)者了解項目的基本信息、項目開發(fā)者、組織、許可證等。以下是 Maven 中常見的用于項目描述的標簽:
項目描述類標簽
1. <modelVersion>
標簽
描述: 指定 POM 文件的模型版本。對于 Maven 2 和更高版本,通常為 4.0.0。
<modelVersion>4.0.0</modelVersion>
2. <groud>
標簽
描述: 項目的組標識符,通常表示組織或公司名稱。與 <artifactId>
共同唯一標識項目。
<groupId>com.example</groupId>
3. <artifactId>
標簽
描述: 項目的工件標識符,通常是模塊或項目的名稱。與 <groupId>
共同唯一標識項目。
<artifactId>my-project</artifactId>
4. <version>
標簽
描述: 項目的版本號。可以是 1.0.0-SNAPSHOT
表示開發(fā)中的版本,或者1.0.0
表示正式版本。
<version>1.0.0-SNAPSHOT</version>
5. <packaging>
標簽
描述: 定義項目的打包方式。常見的值有 jar
, war
, pom
等,默認為 jar
。
<packaging>jar</packaging>
6. <name>
標簽
描述: 項目的名稱。
<name>My Project</name>
7. <description>
標簽
描述: 對項目的簡要描述。通常用于進一步解釋項目的功能或目的。
<description>This is a sample project to demonstrate Maven project descriptors.</description>
8. <url>
標簽
描述: 目的主頁或相關文檔的 URL??梢允琼椖康墓倬W地址或代碼托管平臺的鏈接。
<description>This is a sample project to demonstrate Maven project descriptors.</description>
9. <inceptionYear>
標簽
描述: 項目的啟動年份,通常用于版權聲明中。
<inceptionYear>2024</inceptionYear>
10. <organization>
標簽
描述: 定義項目所屬的組織信息,包括組織名稱和 URL。
<organization> <name>Example Corp</name> <url>https://www.example.com</url> </organization>
11. <licenses>
標簽
描述: 描述項目使用的許可證信息。包括許可證名稱、URL、分發(fā)方式等。
<licenses> <license> <name>Apache License, Version 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0</url> <distribution>repo</distribution> </license> </licenses>
12. <developers>
標簽
描述: 列出項目的開發(fā)人員及其相關信息,如 ID、姓名、電子郵件等。
<developers> <developer> <id>123</id> <!-- 開發(fā)者ID --> <name>yjp</name> <!-- 姓名 --> <email>yjp@example.com</email> <!-- 郵箱 --> <organization>sis</organization> <!-- 組織 --> <roles> <!-- 角色 --> <role>Developer</role> </roles> </developer> </developers>
13. <contributors>
標簽
描述: 列出對項目做出貢獻的人員及其相關信息,類似于 ,但通常不是核心開發(fā)人員。
<!-- 貢獻者信息 --> <contributors> <contributor> <name>Jane Smith</name> <!-- 姓名 --> <email>janesmith@example.com</email> <!-- 郵箱 --> <organization>Example Corp</organization> <!-- 組織 --> </contributor> </contributors>
14. <issueManagement>
標簽
描述: 項目的問題管理系統(tǒng)的信息,如 JIRA、GitHub Issues 等。通常包括系統(tǒng)的類型和 URL。
<issueManagement> <system>GitHub Issues</system> <url>https://github.com/example/my-project/issues</url> </issueManagement>
15. <scm>
標簽
描述: 項目的源碼管理(Source Code Management)信息。包括版本控制系統(tǒng)的類型和訪問 URL。
<scm> <url>https://github.com/example/my-project</url> <connection>scm:git:git://github.com/example/my-project.git</connection> <developerConnection>scm:git:ssh://git@github.com/example/my-project.git</developerConnection> <tag>HEAD</tag> </scm>
依賴管理類標簽
1. <dependencyManagement>
標簽
描述: <dependencyManagement>
標簽用于集中管理依賴的版本號和范圍。它不會直接引入依賴,而是為項目中的其他模塊提供版本號的定義,避免在各模塊中重復定義版本號。子項目可以在使用這些依賴時,不必再次聲明版本號。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.4</version> </dependency> </dependencies> </dependencyManagement>
2. <dependencies>
和 <dependency>
標簽
<dependencies>
:該標簽是一個容器,用于包含項目中所需的所有依賴。每個依賴項由<dependency>
標簽來定義。<dependency>
:定義了一個具體的依賴項。通常包含以下幾個子標簽:<groupId>
:依賴的組織標識符,通常代表某個組織或公司名稱。<artifactId>
:依賴的工件標識符,通常是模塊或項目的名稱。<version>
:依賴的版本號。<scope>
:依賴的作用域(稍后詳細介紹)。<optional>
:指定該依賴是否為可選依賴,默認值為 false。
<dependencyManagement> <!-- 依賴管理 --> <dependencies> <dependency> <groupId>cn.iocoder.boot</groupId> <!-- 組織ID --> <artifactId>yjp-dependencies</artifactId> <!-- 項目名稱 --> <version>${revision}</version> <!-- 版本號 --> <type>pom</type> <!-- 導入類型:pom 表示該依賴是一個POM類型,而不是一個標準的Java庫(如JAR)。POM類型通常用于依賴管理或繼承。 --> <scope>import</scope> <!-- 導入范圍:import 表示該依賴將導入另一個POM文件,而不是直接作為一個庫。 --> <optional>false</optional> <!-- 可選依賴:optional 表示該依賴是可選的,即在使用該依賴時,可以選擇性地導入。 --> </dependency> </dependencies> </dependencyManagement>
3. <scope>
標簽
描述: <scope>
屬性用于指定依賴的作用域,決定了該依賴在構建生命周期的哪些階段可用,以及它是否會被傳遞給依賴它的項目。Maven支持的主要作用域包括以下幾種:
(1) compile
(默認作用域)
- 說明: 這是默認的作用域,如果沒有顯式指定
<scope>
,Maven會將其視為compile
。 - 適用范圍: 編譯、測試和運行時都可用。
- 傳遞性: 會傳遞給依賴此項目的所有項目。
<dependency> <groupId>org.example</groupId> <artifactId>example-lib</artifactId> <version>1.0.0</version> <!-- compile是默認的,不需要顯式指定 --> </dependency>
(2) provided
- 說明: 依賴在編譯和測試階段可用,但運行時不包含該依賴。通常用于由運行環(huán)境(如Servlet容器、應用服務器)提供的依賴。
- 適用范圍: 編譯和測試時可用,但運行時不包含。
- 傳遞性: 不會傳遞給依賴此項目的其他項目。
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
(3) runtime
- 說明: 依賴在運行時和測試階段可用,但在編譯時不可用。通常用于那些僅在運行時需要的庫。
- 適用范圍: 測試和運行時可用,編譯時不可用。
- 傳遞性: 會傳遞給依賴此項目的其他項目。
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> <scope>runtime</scope> </dependency>
(4) test
- 說明: 依賴僅在測試編譯和測試運行時可用,不會包含在最終的構建成果中。
- 適用范圍: 僅測試時可用,編譯和運行時不可用
- 傳遞性: 不會傳遞給依賴此項目的其他項目。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
(5) system
- 說明: 依賴類似于provided作用域,但必須顯式提供依賴的路徑(通過
systemPath
元素),不會從Maven倉庫中下載該依賴。通常不推薦使用。 - 適用范圍: 編譯和測試時可用,運行時不包含。
- 傳遞性: 不會傳遞給依賴此項目的其他項目。
<dependency> <groupId>com.example</groupId> <artifactId>example-lib</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/libs/example-lib.jar</systemPath> </dependency>
(6) import
- 說明: 這個作用域僅用于依賴管理(通常是BOM文件- Bill of Materials),可以將指定POM文件中的依賴版本管理導入到當前項目中。
- 適用范圍: 僅用于
<dependencyManagement>
內的依賴聲明,不能用于常規(guī)依賴。 - 傳遞性: 導入的版本管理會影響當前項目及其子模塊。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.4</version> <type>pom</type> <scope>import</scope> </dependency>
這些作用域幫助開發(fā)者在構建過程中有效管理依賴的使用范圍和傳遞性,根據具體場景選擇合適的作用域可以避免不必要的依賴引入,提高項目的可維護性和構建效率。
4. <exclusions>
標簽
描述: 當一個依賴引入了不需要的傳遞依賴時,我們可以使用 <exclusions>
標簽將其排除。每個 <exclusion>
元素定義一個要排除的依賴,通常包含<groupId>
和 <artifactId>
子標簽。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.4</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
5. <optional>
標簽
描述: <optional>
標簽用于標記一個依賴是否為可選??蛇x依賴不會自動傳遞給依賴此項目的其他項目。
<dependency> <groupId>com.example</groupId> <artifactId>example-lib</artifactId> <version>1.0.0</version> <optional>true</optional> </dependency>
項目構建類標簽
1. <build>
標簽
**描述:**定義項目的構建配置,如構建目錄、插件、資源、配置文件等。
<build> <!-- 設置構建的 jar 包名 --> <finalName>${project.artifactId}</finalName> <plugins> <!-- 打包 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> <!-- 將引入的 jar 打入其中 --> </goals> </execution> </executions> </plugin> </plugins> </build>
2. <sourceDirectory>
標簽
描述: 定義項目的主源代碼目錄。默認情況下,該目錄為 src/main/java。如果你的源代碼存放在其他目錄中,可以通過該標簽進行修改。
<sourceDirectory>src/main/java</sourceDirectory>
3. <testSourceDirectory>
標簽
描述: 定義項目的測試源代碼目錄。默認情況下,該目錄為 src/test/java。如果你的測試代碼存放在其他目錄中,可以通過該標簽進行修改。
<testSourceDirectory>src/test/java</testSourceDirectory>
4. <outputDirectory>
標簽
描述: 指定編譯后的主代碼輸出目錄。默認值為 target/classes。
<outputDirectory>target/classes</outputDirectory>
5. <finalName>
標簽
描述: 定義構建輸出的最終名稱,不包括文件擴展名。默認情況下,Maven 會將輸出文件命名為 ${artifactId}-${version}
。你可以通過此標簽自定義輸出文件的名稱。
<finalName>my-custom-name</finalName>
6. <resources>
標簽
描述: 定義項目的資源目錄及資源文件。資源文件會被打包到最終的構建產物中(如 JAR 包)。通常資源目錄為 src/main/resources,該標簽允許你自定義資源的路徑和處理方
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources>
7. <plugins>
標簽
描述: 定義 Maven 構建生命周期中的插件。插件是 Maven 的核心組件,用于執(zhí)行各種任務(如編譯、打包、測試、部署等)。你可以在此標簽中配置和使用不同的插件。
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>
8. <executions>
標簽
描述: 用于配置特定插件在構建生命周期中的不同階段執(zhí)行的行為。每個 <executions>
元素可以包含多個 <execution>
子元素,這些子元素定義了插件的一個執(zhí)行任務,包括其執(zhí)行的階段、目標和其他配置。
<build> <plugins> <plugin> <!-- 插件的基本信息 --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <!-- 執(zhí)行配置 --> <executions> <execution> <id>execution-id</id> <!-- 可選:執(zhí)行的標識符,用于區(qū)分多個執(zhí)行 --> <phase>phase-name</phase> <!-- 可選:指定該執(zhí)行應綁定的構建生命周期階段 --> <goals> <goal>goal-name</goal> <!-- 必須:定義要執(zhí)行的目標(可以有多個) --> </goals> <configuration> <!-- 可選:插件特定的配置項 --> </configuration> </execution> <!-- 可以有多個 <execution> 元素 --> </executions> </plugin> </plugins> </build>
9. <execution>
子標簽解釋
<id>
: 可選的執(zhí)行標識符,用于唯一標識每個執(zhí)行。這在多個 元素存在時特別有用。<phase>
: 指定執(zhí)行綁定到 Maven 構建生命周期中的特定階段。比如,compile
、test
、package
、install
、deploy
等。如果沒有指定 <phase>
,插件的執(zhí)行目標(goal)不會自動綁定到任何生命周期階段,必須手動調用。<goals>
: 一個或多個 <goal>
標簽,指定插件的具體目標(或任務),如 compile
、test
、package
等。<configuration>
: 為該執(zhí)行配置插件的特定參數。配置項會覆蓋 <plugin>
元素中的<configuration>
部分。
10.項目構建總結 (1)<repackage>
目標的作用
(1)重新打包現有的 JAR 或 WAR:它將現有的 JAR 或 WAR 文件重新打包成一個可執(zhí)行的 JAR 或 WAR。這意味著這個 JAR 或 WAR 包包含了所有的應用程序代碼和依賴,并且可以通過 java -jar 命令直接運行。
(2)添加 Spring Boot 啟動器:repackage 目標會在生成的 JAR 中添加一個 Spring-Boot-Loader 作為啟動器,這個啟動器負責處理應用程序的啟動和依賴加載。
(3)簡化部署:通過創(chuàng)建一個可執(zhí)行的 JAR 文件,可以大大簡化 Spring Boot 應用程序的部署過程,因為不需要將應用程序部署到外部的應用服務器中。
(2)repackage
目標的常用配置參數
在使用 <goal>repackage</goal>
時,可以通過<configuration>
元素進行多種配置。以下是一些常用的配置參數:
<classifier>
: 生成可執(zhí)行 JAR 的分類器(例如:exec)。這會影響最終 JAR 文件的名稱。<mainClass>
: 指定主類(即 public static void main(String[] args) 所在的類)。如果沒有指定,插件會嘗試自動檢測。<layout>
: 指定重新打包 JAR 的布局(例如:JAR、WAR、ZIP、DIR 等)。默認為 JAR。<outputDirectory>
: 指定重新打包的 JAR 文件的輸出目錄。默認為項目的構建目錄。<skip>
: 如果設置為 true,則跳過重新打包階段。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <goals> <goal>repackage</goal> <!-- 這是 repackage 目標 --> </goals> <configuration> <mainClass>com.example.MyApplication</mainClass> <!-- 指定主類 --> <classifier>exec</classifier> <!-- 設置生成的可執(zhí)行 JAR 文件的分類器 --> </configuration> </execution> </executions> </plugin> </plugins> </build>
11.基礎打包構建示例
<build> <!-- 設置構建的 jar 包名 --> <finalName>${project.artifactId}</finalName> <plugins> <!-- 打包 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> <!-- 將引入的 jar 打入其中 --> </goals> </execution> </executions> </plugin> </plugins> </build>
到此這篇關于SpringBoot項目構建Maven標簽及屬性用法詳解的文章就介紹到這了,更多相關SpringBoot Maven標簽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java數據庫連接池之DBCP淺析_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了Java數據庫連接池之DBCP的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Java統(tǒng)計50個10到50之間整數的隨機出現次數
這篇文章主要為大家詳細介紹了Java統(tǒng)計50個10到50之間整數的隨機出現次數,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07spring中jdbcTemplate.batchUpdate的幾種使用情況
本文主要介紹了spring中jdbcTemplate.batchUpdate的幾種使用情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04詳解SpringBoot中自定義starter的開發(fā)與使用
starter是SpringBoot中非常重要的一個機制,他是基于約定優(yōu)于配置的思想所衍生出來的,本文主要介紹了SpringBoot中自定義starter的開發(fā)與使用,感興趣的可以了解下2023-09-09springboot+mybatis-plus+oracle實現邏輯刪除
最近在做一個前后端分離的小項目,需要刪除用戶表的用戶,本文主要實現了springboot+mybatis-plus+oracle邏輯刪除,具有一定的參考價值,感興趣的可以了解一下2021-08-08