訪問原文:https://www.ibm.com/developerworks/cn/java/j-5things16/index.htmlhtml
掌握現代 Maven 插件的技巧java
Maven 是一個面向 Java™開發人員的領先的依賴管理和構建工具,並且名副其實!它經過闡述項目的構造來標準化軟件構建流程,將它部署爲應用程序,而後與其餘項目共享它。git
Maven 採用了一組可靠的插件來提供它的全部功能。在 Maven 中,插件擁有目標,在幕後,該目標就是 Java 方法。目標執行構建任務,好比編譯項目,打包它,並將它部署到本地或遠程服務器。這些活動可完美地映射到構建生命週期的各個階段。apache
Maven 提供了本身的構建插件,這些插件已打包且可當即使用,並且預先配置了默認值。經過「約定高於配置」原則,能夠確保可以針對給定任務的複雜性來擴展配置。大部分構建任務都只需極少的配置。編程
您還能夠自定義 Maven 插件的行爲。使用 Maven 的 <configuration>
元素,很容易重寫插件默認值並定義新值。毫無疑問,大部分重寫的默認值是 compiler 插件的 <source>
和<target>
值。windows
須要證據?您有多少次將清單 1 中的 XML 添加到 POM 中,以設置正確的 JVM 版本?api
1
2
3
4
5
6
7
8
9
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>3.6.1</
version
>
<
configuration
>
<
source
>1.8</
source
>
<
target
>1.8</
target
>
</
configuration
>
</
plugin
>
|
每一個插件目標都映射到一個 Maven 生命週期階段。發出 mvn compile
命令會告訴 mvn
實用程序調用綁定到 compile
生命週期階段的全部目標。compiler
插件的 compile
目標被綁定到這個生命週期階段。安全
階段與目標之間是一對多的關係。多個插件目標能夠綁定到同一個階段,以造成相關任務集合。階段也是分層的,這意味着執行一個階段會致使執行它前面的全部階段。
在本例中,發出 mvn compile
命令會啓動 validate
階段(Maven 的默認構建生命週期的第一個階段),並調用綁定到該階段的全部目標。
Maven 和 Google Code 網站維護着一個 Maven 插件列表。這些插件提供了各類各樣有用且省時的功能,您能夠將它們整合到構建流程中。我將介紹我發現的一些最有用的插件,並展現如何最充分地利用它們。
單擊下面的按鈕,下載本示例的代碼。它包含一個簡單的應用程序和一個包含已配置好的 Jarsigner
插件的 POM 文件。
對 JAR 或 WAR 執行數字簽名是一項重要任務,尤爲是在您想分發您的應用程序的時候。幸運的是,Java 平臺提供了一個名爲 jarsigner 的存檔簽名實用程序。它是一個命令行工具,可經過向它傳遞存檔文件的位置和各類參數(好比包含您的加密密鑰的密鑰庫)對存檔文件執行簽名。
能夠在 JDK 安裝的 <%JAVA_HOME%>/bin
目錄中找到 jarsigner
。清單 2 展現瞭如何使用此實用程序對 JAR 執行簽名。
1
2
3
4
5
6
|
jarsigner
-keystore /path/to/keystore.jks
-storepass <
password
>
-keypass <
key
password>
YourArchive.jar
alias
|
jarsigner
是一個易於使用的命令行工具,並且開箱即用。 若是能自動化簽名流程,在構建週期的 package
階段對存檔文件執行簽名豈不是更好? 得益於包含 jarsigner
實用程序的 Maven Jarsigner 插件,您能夠實現此目標。您只須要將該插件的 sign
目標綁定到您的構建週期的 package
階段。
首先須要一個密鑰庫。若是沒有,可使用 Java 平臺的 keytool 實用程序建立它,該實用程序可在 JDK 安裝的<%JAVA_HOME%>/bin
目錄中找到。
要建立一個密鑰庫,請導航到您想要放置它的位置並執行清單 3 中的命令。必定要將 KeyAlias
替換爲合適的值,好比您的域名。官方 Oracle 文檔詳細介紹了該工具接受的更多配置選項。
1
|
keytool -genkey -alias <
KeyAlias
> -keyalg RSA -keystore keystore.jks -keysize 2048
|
建立密鑰庫的過程要求您回答一系列有關您本身和您的組織的問題,並提供一個安全密碼。配置 Maven Jarsigner 插件時(接下來就會這麼作)將須要此密碼。
如今將 Maven Jarsigner 插件添加到您的構建生命週期中,而後配置它來對 package
階段中生成的 JAR 執行數字簽名。關聯到此階段是合理的,由於已構造 JAR 並將它存儲在您項目的默認輸出目錄中,該目錄一般是 target
目錄。在 POM 文件的 <plugins>
部分,添加清單 4 中所示的代碼。
1
2
3
4
5
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-jarsigner-plugin</
artifactId
>
<
version
>1.4</
version
>
</
plugin
>
|
您想要在構建 JAR 後對它執行簽名,因此須要將簽名過程(包裝在 sign
目標中)鏈接到 package
生命週期階段。爲此,請將清單 5 中的代碼添加到該插件中。
1
2
3
4
5
6
7
8
9
|
<
executions
>
<
execution
>
<
id
>sign</
id
>
<
phase
>package</
phase
>
<
goals
>
<
goal
>sign</
goal
>
</
goals
>
</
execution
>
</
executions
>
|
sign
目標須要一些配置細節才能對 JAR 執行數字簽名。因此應該在 <configuration>
元素之間添加密鑰庫位置、您想要使用的憑證的別名、密鑰庫密碼和憑證的密碼,如清單 6 所示。
1
2
3
4
5
6
|
<
configuration
>
<
keystore
>/location/of/keystore.jks</
keystore
>
<
alias
>KeyAlias</
alias
>
<
storepass
>password</
storepass
>
<
keypass
>password</
keypass
>
</
configuration
>
|
這是實現 JAR 簽名特性所需的最低配置。請注意,該插件提供了大量額外的配置選項供選擇。
最後一步是構建 JAR 並驗證已對它正確執行簽名。從命令行執行 package
目標,以下所示:mvn clean package
。在控制檯輸出中,會看到 JAR 正在構建,而後被簽名。圖 1 展現了您可能看到的結果
將 JAR 構建到 target
輸出目錄中,這是 Jarsigner 插件指望找到它的位置。該插件將使用您提供的憑證對 JAR 執行簽名,而後向 META-INF
目錄添加兩個額外的文件:一個具備 .SF
擴展名的簽名文件,以及一個具備 .RSA
擴展名的簽名塊文件。
如今已有一個通過數字簽名的 JAR 可供分類。
在分類 JAR 以前,讓咱們驗證已對它進行正確簽名。可使用 Maven Jarsigner 的 verify
目標,或者使用 jarsigner
工具經過命令行來實現此操做。在清單 7 中,我使用了命令行工具並向它傳遞我想要驗證的存檔文件。
1
|
jarsigner -verify target/YourJavaArchive.jar
|
若是成功,則會收到如下消息:jar verified
。
對 JAR 執行簽名不是 Jarsigner 的惟一功能。該插件可對任何 Java 存檔文件執行簽名,包括 WAR 文件。要查看此操做是如何實現的,能夠將 POM 的打包類型從 JAR 更改成 WAR,添加 Maven WAR 插件(如清單 8 所示)並執行命令:mvn clean package
。
1
2
3
4
5
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-war-plugin</
artifactId
>
<
version
>3.1.0</
version
>
</
plugin
>
|
檢查 target
目錄,您會找到已簽名的 WAR 文件。
若是有多個存檔文件要簽名,Jarsigner 也能應對這種狀況。清單 9 中的代碼將 JAR 的簽名位置指定爲 target/all
,而且將對此目錄中的全部 JAR 執行簽名。
1
|
<
archiveDirectory
>target/all</
archiveDirectory
>
|
若是須要更精確地控制要簽名的存檔文件,可使用通配符來顯式包含和排除文件,如清單 10 所示。
1
2
3
4
5
6
|
<
includes
>
<
include
>*1.0.jar</
include
>
</
includes
>
<
excludes
>
<
exclude
>*SNAPSHOT.jar</
exclude
>
</
excludes
>
|
單擊下面的按鈕,下載本示例的代碼。它包含一個簡單的 Web 應用程序和一個包含已配置好的 Cargo 插件的 POM 文件。
來自 Codehaus 的 Cargo 插件 是 Cargo API 的一個包裝器。該 API 旨在配置、啓動、中止應用程序並將它部署到各類受支持的容器中,並解析、建立和合並 Java EE 模塊。
一個特別重要的特性是,Cargo 可以採用容器不可知的方式來指定服務器屬性。這些屬性包括端口、遠程安全憑證、JVM 參數,以及(咱們最感興趣的)您想部署的應用程序的用戶登陸細節。該插件支持 14 種最流行的服務器的最新版本。
Cargo 插件最好關聯到 Maven 生命週期的 package
階段中。也能夠直接引用 run
目標來獨立執行它:mvn cargo:run
。獨立執行會假設該項目已打包且準備好部署。
咱們首先將 Cargo 的 run
目標關聯到 package
階段中,如清單 11 所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
plugin
>
<
groupId
>org.codehaus.cargo</
groupId
>
<
artifactId
>cargo-maven2-plugin</
artifactId
>
<
version
>1.6.4</
version
>
<
executions
>
<
execution
>
<
phase
>package</
phase
>
<
goals
>
<
goal
>run</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
|
完成 Maven 集成後,如今須要對您但願 Cargo 部署應用程序的目標容器進行配置。Cargo 支持各類各樣的容器場景,包括部署到已在運行的本地或遠程服務器(這包括在須要時啓動該服務器)。或者,能夠配置 Cargo 來下載、安裝、部署並啓動它支持的 14 種服務器中的任意一種。
對於本示例,我將使用 IBM® WebSphere® Liberty,我已下載它並解壓到一個名爲 servers
的目錄中。
容器配置至少須要容器 ID 和所安裝服務器的主目錄位置。清單 12 給出了位於個人 servers/wlp
目錄中的 Liberty 服務器的配置。
1
2
3
4
5
6
|
<
configuration
>
<
container
>
<
containerId
>liberty</
containerId
>
<
home
>\path\to\servers\wlp</
home
>
</
container
>
</
configuration
>
|
另外一個選項是指定 IBM 網站上的 Liberty ZIP 文件的 URL,在這種狀況下,Cargo 插件會下載並安裝該服務器。清單 13 顯示了執行此操做的代碼。
1
2
3
4
5
6
7
8
9
10
11
12
|
<
container
>
<
containerId
>liberty</
containerId
>
<
zipUrlInstaller
>
<
url
>
https://public.dhe.ibm.com/ibmdl/export/pub/
software/websphere/wasdev/downloads/wlp/17.0.0.2/
wlp-webProfile7-17.0.0.2.zip
</
url
>
<
downloadDir
>/path/to/downloadDir</
downloadDir
>
<
extractDir
>/path/to/extractDir</
extractDir
>
</
zipUrlInstaller
>
</
container
>
|
第一次執行 run
目標時,會下載和解壓 ZIP 文件。在後續執行時,Maven 會檢測到該文件已下載和安裝,並跳過該任務。
您如今擁有最少的配置,能夠將該應用程序部署到您的服務器中來測試該配置。經過調用 package
階段 (mvn package
) 來啓動該流程。將應用程序編譯、打包並部署到服務器中,並且可經過如下 URL 訪問它:http://localhost:8080/{artifactid}/index.html
。
默認狀況下,使用 artifactid
來命名 Web 應用程序的上下文根目錄。在某些狀況下,您須要指定一個自定義上下文根目錄。在清單 14 中,我將上下文根目錄定義爲 home
。
1
2
3
4
5
6
7
|
<
deployables
>
<
deployable
>
<
properties
>
<
context
>home</
context
>
</
properties
>
</
deployable
>
</
deployables
>
|
部署應用程序後,可經過如下地址訪問該 Web 應用程序: localhost:8080/home/index.html
。
您如今已有一個很是可靠的部署流程,它會下載並安裝一個服務器,將您的應用程序部署到一個自定義上下文根目錄中。對於 Cargo 插件的功能而言,這纔剛剛開始。
在咱們開始定義配置屬性時,Cargo 才真正發揮出它的實力。正如我以前提到的,這些配置屬性是容器的屬性,好比端口、協議,最重要的是用戶登陸細節。
讓咱們向示例應用程序添加一個用戶,並強制登陸到該站點。爲了保持簡單,咱們將使用基自己份驗證方法,只須要應用程序的 web.xml
文件中的極少配置。清單 15 顯示了 user-role
的規範和對 WelcomeServlet
Web 資源的限制。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<
web-app
version
=
"3.1"
...>
<
security-constraint
>
<
web-resource-collection
>
<
web-resource-name
>Welcome Servlet</
web-resource-name
>
<
url-pattern
>/WelcomeServlet/*</
url-pattern
>
<
http-method
>GET</
http-method
>
</
web-resource-collection
>
<
auth-constraint
>
<
role-name
>user-role</
role-name
>
</
auth-constraint
>
</
security-constraint
>
<
login-config
>
<
auth-method
>BASIC</
auth-method
>
<
realm-name
>file</
realm-name
>
</
login-config
>
<
security-role
>
<
role-name
>user-role</
role-name
>
</
security-role
>
</
web-app
>
|
能夠配置 Cargo 插件來爲 user-role
建立一個用戶,這能夠在部署時動態完成。 清單 16 給出了爲 user-role
定義的用戶名和密碼。用戶名爲 user
,密碼爲 user123!
。
1
2
3
4
5
6
7
|
<
configuration
>
<
properties
>
<
cargo.servlet.users
>
user:user1234!:user-role
</
cargo.servlet.users
>
</
properties
>
</
configuration
>
|
<cargo.servlet.users>
屬性的格式爲 username:password:role
。經過使用豎線符號分隔屬性集合,能夠在一個屬性中爲同一個和不一樣的角色聲明多個用戶:
1
|
username1:password1:role11,...,role1N|username2:password2:role21,...,role2N|...
|
將用戶名和密碼分配給用戶角色後,如今能夠打包和部署應用程序了。只需使用一個命令 (mvn clean package
),就會將您的 Web 應用程序編譯、打包並部署到 Liberty 容器。該服務器也會啓動。
若是導航到 URL http://localhost:8080/home/WelcomeServlet
,將會看到一個登陸框,如圖 2 所示。輸入在 Cargo 插件中配置的用戶名和密碼,單擊 Log In 進入該應用程序。
將 JAR 包含在項目中的傳統方式是,在項目中建立一個目錄並確保它位於類路徑上。藉助 Maven,您不須要這樣作。不須要將 JAR 和項目放在一塊兒,Maven 將它們存儲在一個隔離的本地存儲庫中。而後,您的項目必須指定對這些 JAR 的依賴關係。
該本地存儲庫中填充了從中央 Maven 存儲庫下載的依賴項。這就像一艘 Maven 航母,包含數千個流行和通用的 JAR。可是若是您想要使用的 JAR 不在 Maven 中央存儲庫中,該怎麼辦?固然,您能夠依靠傳統解決方案,將 JAR 直接包含在項目中,但您將沒法從 Maven 的依賴管理中獲益。
可使用 maven install plugin
將 JAR 安裝到本地 Maven 存儲庫中。首先,您須要下載該插件,而後能夠執行它的 install-file 目標。這個示例與前面的示例稍有不一樣,由於您不會將該目標與一個 Maven 生命週期階段關聯。您會在 Maven 命令行工具中指定該目標。
install-file
目標須要 5 個參數來指定 JAR 文件的位置、group
、artifactid
、它的版本號和包類型。清單 17 給出了該 Maven 命令的結構。
1
2
3
4
5
6
|
mvn install:install-file
-Dfile=PATH/TO/YOUR-JAR.jar
-DgroupId=GROUP-ID
-DartifactId=ARTIFACT-ID
-Dversion=VERSION
-Dpackaging=jar
|
對於您但願安裝的 JAR,須要指定上面所顯示參數的值。您能夠將它們指定爲您想要的任何值。執行該操做後,您能夠親眼看到新文件存儲在本地 Maven 存儲庫中。導航到存儲庫目錄 /.m2/repository
,找到名爲 GROUP-ID
的文件夾。若是 groupId
值是一個反向域名,好比 com.readlearncode
,能夠搜索 com
目錄,而後導航到 readlearncode
目錄。您能夠在這裏找到一個文件夾,其中包含已安裝在該文件夾中的工件和 JAR 的版本號。JAR 的位置可能相似於:/.m2/repository/com/readlearncode/4.0/MyJar.jar
。
您的 JAR 如今可供您的全部項目使用。您能夠像日常同樣將它做爲依賴項添加到您的 POM 中,如清單 18 所示。
1
2
3
4
5
|
<
dependency
>
<
groupId
>GROUP-ID</
groupId
>
<
artifactId
>ARTIFACT-ID</
artifactId
>
<
version
>VERSION</
version
>
</
dependency
>
|
單擊下面的按鈕,下載本示例的代碼。它包含一個簡單的應用程序和一個已配置好 site-maven-plugin
的 POM 文件。
將 Maven 存儲庫託管在 GitHub 上有許多理由,包括許可問題、隱私和商業託管成本。不管您爲何選擇託管基於 GitHub 的 Maven 存儲庫,設置一個存儲庫都很容易。
首先,在現有 GitHub 存儲庫中建立一個分支,將項目的工件直接安裝到該分支中。這將綁定到 Maven 生命週期的 deploy
階段,以便在部署項目時,能夠自動刷新遠程存儲庫。
在 GitHub 存儲庫中建立 Maven 分支後,須要將您的 GitHub 存儲庫憑證添加到 Maven 的 settings.xml
文件中。此文件一般可在 .m2
目錄中找到。在 settings.xml
的 <servers>
元素之間,須要定義一個新服務器並指定您的用戶名和密碼。清單 19 演示了此過程(請注意,我將個人新服務器命名爲 github
)。
1
2
3
4
5
6
7
|
<
servers
>
<
server
>
<
id
>github</
id
>
<
username
>USERNAME_OR_EMAIL</
username
>
<
password
>PASSWORD</
password
>
</
server
>
</
servers
>
|
若是啓用了雙因素身份驗證,則須要經過 GitHub Settings 建立一個 Personal Access Token。將該令牌直接複製並粘貼到 <password>
元素中。要實現額外的安全保護,可按照 Maven 網站上的說明來加密密碼。
在 Maven POM 中,您將使用 GitHub 的 site-maven-plugin。您須要作的第一件事是設置一個從中提交文件的基本目錄。首先建立一個臨時目錄,並將它放在項目的 target
目錄中,如清單 20 所示。對於本示例,我將該目錄命名爲 repo-stage
。
接下來,由於您想將此插件關聯到 deploy
階段,因此必須在 maven-deploy-plugin
的 <altDeploymentRepository>
中指定存儲庫位置。清單 20 中的代碼片斷展現瞭如何指定存儲庫位置。
1
2
3
4
5
6
7
8
9
10
|
<
plugin
>
<
artifactId
>maven-deploy-plugin</
artifactId
>
<
version
>2.8.2</
version
>
<
configuration
>
<
altDeploymentRepository
>
Repo.stage::default::file://
${project.build.directory}/repo-stage
</
altDeploymentRepository
>
</
configuration
>
</
plugin
>
|
最後,須要配置 site-maven-plugin
並將它關聯到 deploy
階段。爲此,請向該插件傳遞以前建立的 GitHub 服務器的 id
。還須要向它傳遞存儲庫名稱和全部者、您將項目工件提交到的分支,以及針對該提交的註釋。您還須要關閉 Jekyll,讓它不會認爲本身須要生成 GitHub 頁面。
清單 21 給出了 site-maven-plugin
的完整配置。請注意,存儲庫名稱是 dependency
(若是該分支不存在,GitHub 將建立它)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<
plugin
>
<
groupId
>com.github.github</
groupId
>
<
artifactId
>site-maven-plugin</
artifactId
>
<
version
>0.12</
version
>
<
configuration
>
<!-- Github settings -->
<
server
>github</
server
>
<
repositoryName
>MavenSampler</
repositoryName
>
<
repositoryOwner
>atheedom</
repositoryOwner
>
<
branch
>refs/heads/dependency</
branch
>
<
message
>
Artifacts for
${project.name}/${project.artifactId}/${project.version}
</
message
>
<
noJekyll
>true</
noJekyll
>
<!-- Deployment values -->
<
outputDirectory
>
${project.build.directory}/repo-stage
</
outputDirectory
>
<
includes
>
<
include
>**/*</
include
>
</
includes
>
</
configuration
>
<
executions
>
<
execution
>
<
phase
>deploy</
phase
>
<
goals
>
<
goal
>site</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
|
如今只剩下運行命令 mvn clean deploy
了。在控制檯中,您會看到該插件將存儲庫文件上傳到您的 GitHub 賬戶,建立提交,並將該提交推送到依賴項分支。控制檯輸出應相似於圖 3。
要驗證全部步驟都按預期進行,請訪問您的 GitHub 存儲庫並選擇 dependency
分支。您會看到項目的全部工件,如圖 4 所示。
確認您的工件已安全提交到您的 GitHub Maven 存儲庫後,您可能想與但願依靠您項目的其餘人共享新的存儲庫。
要將 GitHub Maven 存儲庫指定爲他們本身的項目的遠程存儲庫,訂閱者須要在他們的 POM 中聲明該存儲庫,如清單 22 所示。而後,將按正常方式指定您的項目的工件,如清單 23 所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
repositories
>
<
repository
>
<
id
>PROJECT_NAME-dependency</
id
>
<
url
>
https://raw.github.com/
GITHUB_USERNAME/PROJECT_NAME/dependency
</
url
>
<
snapshots
>
<
enabled
>true</
enabled
>
<
updatePolicy
>always</
updatePolicy
>
</
snapshots
>
</
repository
>
</
repositories
>
|
1
2
3
4
5
|
<
dependency
>
<
groupId
>com.readlearncode</
groupId
>
<
artifactId
>maven-sampler</
artifactId
>
<
version
>1.0</
version
>
</
dependency
>
|
如今,您擁有一個簡單的公共 Maven 存儲庫,用於部署您的依賴項並與全世界共享它們。
Apache Maven 的應用如此普遍,以致於查找未知的技巧和訣竅就像勘探金礦同樣。因此我決定最後提供一些我發現很是有用的消息。在其中,您能找到一些節省時間和避免受挫的寶貴技巧。
開發工做既有趣又使人興奮,尤爲是在您使用新 API 和技術時。Maven 也能快速、輕鬆地引入新技術:您只須要將依賴項複製並粘貼到您的 POM 文件中,而後就大功告成了。可是,做爲開發人員,咱們有時會被激情衝昏了頭腦,忘記刪除未使用的依賴項;或者咱們懶得這麼作。隨着時間的推移,這種壞習慣可能讓您的 POM 不斷變大並減緩您的部署。
因此個人第一條技巧是,Maven 就像機器人真空吸塵器 Roomba。只需運行清單 24 中的命令,Maven 就會分析您的項目代碼,查找未使用的依賴項並確認它們。
1
|
dependency:analyze
|
您須要時常清潔您的 Maven 存儲庫—也許是由於誤用,或者由於您的 IDE 索引速度很是慢。不管何種緣由,均可以執行清單 25 中的代碼來刪除全部污染物。
1
|
mvn dependency:purge-local-repository
|
這將清潔當前項目,而後自動下載其全部依賴項。您的項目將得到重生,並準備好再次超越自我。
向構建週期添加時間戳可能很是有用。Maven 2 引入了構建變量 maven.build.timestamp
,它表示構建的開始時間。可經過變量 ${maven.build.timestamp}
,在 POM 中的任何地方使用此變量。
可使用 Java SimpleDateFormat 類來格式化時間戳,並使用屬性 <maven.build.timestamp.format>
來聲明它。清單 26 給出了一個實現此過程的示例。
1
2
3
4
5
|
<
properties
>
<
maven.build.timestamp.format
>
yyyy-MM-dd'T'HH:mm:ss'Z'
</
maven.build.timestamp.format
>
</
properties
>
|
您是否曾經想知道某個 Maven 屬性值?不用猜想,您可使用 maven-antrun-plugin 得到明確的答案。這個小巧的工具會將您傳遞給它的任何屬性回顯到控制檯。
在清單 27 中,將 antrun
的 run
目標關聯到 Maven 的 validate
階段中(第一個默認生命週期階段),使用 configuration 部分的 <echo>
元素來輸出屬性值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-antrun-plugin</
artifactId
>
<
version
>1.1</
version
>
<
|