此:
<requiredProperties>
<requiredProperty key=.. >
<defaultValue/>
<validationRegex/>
</requiredProperty>
</requiredProperties>
... 是定義所需的屬性(使用默認值和驗證)的方式。但是,IIRC是在原型插件的v3.0.0中引入的,因此您可能使用的是以前的版本。
編輯1:在回答這個問題時,「validationRegex可以應用於artifactId和groupId」。是的,它可以。它可以應用於requiredProperties
中的任何條目,但有以下注意事項:validationRegex
僅適用於在命令行中提供的輸入,因此通過命令行參數(-DgroupId=...
,-DartifactId=...
)提供defaultValue
或定義值旁邊的步驟驗證。下面是一個具體的例子,考慮以下requiredProperties
在archetype-descriptor.xml
:
<requiredProperties>
<requiredProperty key="artifactId">
<validationRegex>^[a-z]*$</validationRegex>
</requiredProperty>
<requiredProperty key="groupId">
<defaultValue>COM.XYZ.PQR</defaultValue>
<validationRegex>^[a-z]*$</validationRegex>
</requiredProperty>
</requiredProperties>
下面的命令:mvn archetype:generate -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DgroupId=com.foo.bar
將導致com.foo.bar
被用於groupId和用戶將被提示提供一個的artifactId像這樣:
定義屬性「用戶名」的值(應與表達式'^ [az] * $')匹配:無論
值與表達式不匹配,請重試:無論如何
定義值屬性...
到目前爲止好(在某種程度上)。
但是,以下命令mvn archetype:generate -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=whatever
將導致COM.XYZ.PQR
被用於groupId,即使它不符合validationRegex
。
類似地;以下命令mvn archetype:generate -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=WHATEVER
將導致COM.XYZ.PQR
用於groupId,WHATEVER
用於artifactId,即使這些值不符合validationRegex
。
因此,簡言之:將validationRegex
作品任何requiredProperty(無論其一個保留屬性 - 如artifactId的 - 或定製的屬性),但它只適用於值被提供交互,並因此設置默認值或通過命令行參數旁邊的步驟驗證提供一個值。
注意:即使您確實使用validationRegex
,您也可能要考慮使用Maven Enforcer插件的requireProperty rule,因爲在使用原型創建項目後,您要強制執行的項目屬性可能會發生更改。從文檔:
此規則可以強制設置聲明的屬性,並有選擇地根據正則表達式對其進行評估。
下面是一個例子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>project.artifactId</property>
<message>"Project artifactId must match ...some naming convention..."</message>
<regex>...naming convention regex...</regex>
<regexMessage>"Project artifactId must ..."</regexMessage>
</requireProperty>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
http://www.eclipse.org/m2e/documentation/release-notes-17.html顯示,M2E仍然使用Maven的原型 - 插件2.4,所以對requiredProperties沒有正則表達式驗證。這部分解決了。 –