讀古今文學網 > Maven實戰 > 17.4 Mojo參數 >

17.4 Mojo參數

正如在代碼清單17-2中所看到的那樣,我們可以使用@parameter將Mojo的某個字段標注為可配置的參數,即Mojo參數。事實上幾乎每個Mojo都有一個或者多個Mojo參數,通過配置這些參數,Maven用戶可以自定義插件的行為。7.5.2節和7.5.3節就分別配置了maven-compiler-plugin和maven-antrun-plugin的Mojo參數。

Maven支持種類多樣的Mojo參數,包括單值的boolean、int、float、String、Date、File和URL,多值的數組、Collection、Map、Properties等。

·boolean(包括boolean和Boolean)

對應的配置如下:

·int(包括Integer、long、Long、short、Short、byte、Byte)

對應的配置如下:

·float(包括Float、double、Double)

對應的配置如下:

·String(包括StringBuffer、char、Character)

對應的配置如下:

·Date(格式為yyyy-MM-dd HH:mm:ss.S a或者yyyy-MM-dd HH:mm:ssa)

對應的配置如下:

或者

·File

對應的配置如下:

·URL

對應的配置如下:

·數組

對應的配置如下:

·Collection(任何實現Collection接口的類,如ArrayList和HashSet)

對應的配置如下:

·Map

對應的配置如下:

·Properties

對應的配置如下:

一個簡單的@parameter標注就能讓用戶配置各種類型的Mojo字段,不過在此基礎上,用戶還能為@parameter標注提供一些額外的屬性,進一步自定義Mojo參數。

·@parameter alias=「<aliasName>」

使用alias,用戶就可以為Mojo參數使用別名,當Mojo字段名稱太長或者可讀性不強時,這個別名就非常有用。例如:

對應的配置如下:

·@parameter expression=「${aSystemProperty}」

使用系統屬性表達式對Mojo參數進行賦值,這是非常有用的特性。配置了@parameter的expression之後,用戶可以在命令行配置該Mojo參數。例如,maven-surefire-plugin的test目標有如下源碼:

用戶可以在POM中配置skip參數,同時也可以直接在命令行使用-Dmaven.test.skip=true來跳過測試。如果Mojo參數沒有提供expression,那就意味著該參數無法在命令行直接配置。還需要注意的是,Mojo參數的名稱和expression名稱不一定相同。

·@parameter default-value=「aValue/${anExpression}」

如果用戶沒有配置該Mojo參數,就為其提供一個默認值。該值可以是一個簡單字面量如「true」、「hello」或者「1.5」,也可以是一個表達式,以方便使用POM的某個元素。

例如,下面代碼中的參數sampleBoolean默認值為true:

代碼清單17-2中有如下代碼:

表示默認使用POM元素<project><build><sourceDirectory>的值。

除了@parameter標注外,還看到可以為Mojo參數使用@readonly和@required標注。

·@readonly

表示該Mojo參數是只讀的,如果使用了該標注,用戶就無法對其進行配置。通常在應用POM元素內容的時候,我們不希望用戶干涉。代碼清單17-2就是很好的例子。

·@readonly

表示該Mojo參數是必須的,如果使用了該標注,但是用戶沒有配置該Mojo參數且其沒有默認值,Maven就會報錯。