正如在代碼清單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)
![](/d/file/xuexi/511d2f353bddd6e7c9750a6345781665.jpg)
對應的配置如下:
![](/d/file/xuexi/2a5af1caf416759d1439aff5817ef8ba.jpg)
·int(包括Integer、long、Long、short、Short、byte、Byte)
![](/d/file/xuexi/197bff777fa95f7a27f039d7ea484131.jpg)
對應的配置如下:
![](/d/file/xuexi/c74c69f26a14aa34774b643e206351df.jpg)
·float(包括Float、double、Double)
![](/d/file/xuexi/884f416c6b944f88d8b02135642d4736.jpg)
對應的配置如下:
![](/d/file/xuexi/c92d33f1f873be2e9b7b1b4ee92c3aad.jpg)
·String(包括StringBuffer、char、Character)
![](/d/file/xuexi/9fc861236bd8cbc8ee6f01b2fcfe6ba1.jpg)
對應的配置如下:
![](/d/file/xuexi/f345bf9e29b4bacb7c0e8cbc91eafafc.jpg)
·Date(格式為yyyy-MM-dd HH:mm:ss.S a或者yyyy-MM-dd HH:mm:ssa)
![](/d/file/xuexi/2fd10953d8a28095509e1ea9618abb4d.jpg)
對應的配置如下:
![](/d/file/xuexi/e652088c61e70de598ef28525912f53b.jpg)
或者
![](/d/file/xuexi/405a287ba88cfe6b08d8afd934c2432e.jpg)
·File
![](/d/file/xuexi/6bc2e4b3eec1c60bdea9c5d547424e6d.jpg)
對應的配置如下:
![](/d/file/xuexi/3bc334b46184c8b47953771e94a66de8.jpg)
·URL
![](/d/file/xuexi/0849ffc2e626d12dec63c734107f5fdf.jpg)
對應的配置如下:
![](/d/file/xuexi/4cadfd4b2161093a3c2b716c1ce1ba84.jpg)
·數組
![](/d/file/xuexi/ba7db06ba2e02479bda9109edc64dd39.jpg)
對應的配置如下:
![](/d/file/xuexi/eece7771e616f398aa643ddf086d7632.jpg)
·Collection(任何實現Collection接口的類,如ArrayList和HashSet)
![](/d/file/xuexi/7763169092cd1da51c3cb5cb8b185cc9.jpg)
對應的配置如下:
![](/d/file/xuexi/e5179ecc8a050686049122fe2570be26.jpg)
·Map
![](/d/file/xuexi/24b930378349491e0b5dd2e2d813db48.jpg)
對應的配置如下:
![](/d/file/xuexi/14f809f520d16b9a40fa65f09bdc9daf.jpg)
·Properties
![](/d/file/xuexi/e502c8d52f469882816b17db78551624.jpg)
對應的配置如下:
![](/d/file/xuexi/fd37928f37fb5c099d021e2399902025.jpg)
一個簡單的@parameter標注就能讓用戶配置各種類型的Mojo字段,不過在此基礎上,用戶還能為@parameter標注提供一些額外的屬性,進一步自定義Mojo參數。
·@parameter alias=「<aliasName>」
使用alias,用戶就可以為Mojo參數使用別名,當Mojo字段名稱太長或者可讀性不強時,這個別名就非常有用。例如:
![](/d/file/xuexi/9a967772a1df37708cec566463553601.jpg)
對應的配置如下:
![](/d/file/xuexi/597ef13db8822ead4c3609114477b429.jpg)
·@parameter expression=「${aSystemProperty}」
使用系統屬性表達式對Mojo參數進行賦值,這是非常有用的特性。配置了@parameter的expression之後,用戶可以在命令行配置該Mojo參數。例如,maven-surefire-plugin的test目標有如下源碼:
![](/d/file/xuexi/3e694f5d02968d18251fc1f6360d9451.jpg)
用戶可以在POM中配置skip參數,同時也可以直接在命令行使用-Dmaven.test.skip=true來跳過測試。如果Mojo參數沒有提供expression,那就意味著該參數無法在命令行直接配置。還需要注意的是,Mojo參數的名稱和expression名稱不一定相同。
·@parameter default-value=「aValue/${anExpression}」
如果用戶沒有配置該Mojo參數,就為其提供一個默認值。該值可以是一個簡單字面量如「true」、「hello」或者「1.5」,也可以是一個表達式,以方便使用POM的某個元素。
例如,下面代碼中的參數sampleBoolean默認值為true:
![](/d/file/xuexi/05010ba4e23438d7740613be1bc0e35e.jpg)
代碼清單17-2中有如下代碼:
![](/d/file/xuexi/f35a9b8611fdce5f9d6477ec3ab24604.jpg)
表示默認使用POM元素<project><build><sourceDirectory>的值。
除了@parameter標注外,還看到可以為Mojo參數使用@readonly和@required標注。
·@readonly
表示該Mojo參數是只讀的,如果使用了該標注,用戶就無法對其進行配置。通常在應用POM元素內容的時候,我們不希望用戶干涉。代碼清單17-2就是很好的例子。
·@readonly
表示該Mojo參數是必須的,如果使用了該標注,但是用戶沒有配置該Mojo參數且其沒有默認值,Maven就會報錯。