2017-09-08 10 views
3

提供されたartifactIdとgroupIdが指定された正規表現と一致するかどうかをチェックするMavenのアーキタイプを作成したいとします。このようにして、私は組織の命名規則を施行したいと思います。 earファイルは-appで終わり、すべてのgroupIdsはde.companynameで始まります。Maven Archetype:artifactIdまたはgroupIdを検証する

これは可能ですか?

私はあなたがrequiredProperty

https://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html

のための正規表現に対してチェックできることがわかったが、私は日食を通じて原型を構築する際に指定した値がmaven-の古いバージョンに起因する可能性があり、無視されますEclipseで使用されるarchetype-plugin(groupIdやartifactIdなどの "ビルドイン"プロパティには適用されません)。

+0

http://www.eclipse.org/m2e/documentation/release-notes-17.htmlはのM2eはまだそう、のmaven-原型-プラグイン2.4を使用していることを示していますrequiredPropertiesのregex検証はありません。その部分は解決されます。 –

答えて

2

この:

<requiredProperties> 
    <requiredProperty key=.. > 
     <defaultValue/> 
     <validationRegex/> 
    </requiredProperty> 
    </requiredProperties> 

... (デフォルトおよび検証で)必要なプロパティを定義する方法です。しかし、IIRCはarchetypeプラグインのv3.0.0で導入されました。おそらくあなたは以前のバージョンを使用しています。

編集1:この質問に対して「validationRegexはartifactIdとgroupIdに適用できます」はい、できます。これはの任意のエントリに適用できますが、この注意点が適用されます。validationRegexはコマンドラインで提供される入力に対してのみ機能するため、defaultValueを指定するか、コマンドラインパラメータ(-DgroupId=...,)のサイドステップで値を定義します。ここでの具体例は、archetype-descriptor.xmlで以下requiredProperties与えられ、次のとおり

<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.barcom.foo.barをのgroupIdに使用され、ユーザがそうようなたartifactIdを供給するように要求することになります

プロパティ 'username'の値を定義します(式 '^ [az] * $'に一致する必要があります):Whatever

値が一致しません。もう一度やり直してください:whatever

は...プロパティの値を定義します

(一種の)これまでのところは良いです。

しかし、次のコマンドmvn archetype:generate -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=whateverは、validationRegexには準拠していませんが、COM.XYZ.PQRがgroupIdに使用されます。

同様に、次のコマンドmvn archetype:generate -DarchetypeGroupId=... -DarchetypeArtifactId=... -DarchetypeVersion=... -DartifactId=WHATEVERは、がgroupIdに使用され、WHATEVERvalidationRegexに準拠していなくてもartifactIdに使用されます。

したがって、要約する:任意requiredPropertyためvalidationRegex作品(予約済みプロパティそのかどうか - 例えばたartifactIdよう - または特注プロパティ)のデフォルト値を設定する対話的ひいては設けられ、それは値のみに適用されなく、またはコマンドラインパラメータを介して値を入力すると、検証のステップが実行されます。

注:を使用しても、Maven Enforcer PluginのrequireProperty ruleを使用することを検討することをお勧めします。これは、プロジェクトの作成にarchetypeを使用した後で変更することができるためです。ドキュメントから:

このルールは、宣言されたプロパティが設定されているかどうかを強制し、オプションで正規表現に対して評価します。ここで

は例です:

<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> 
+0

ありがとうございますが、validationRegexをartifactIdとgroupIdに適用できますか? –

+0

はい、これらのパラメータ値が対話形式で提供されている限りです。私はこれを明確にするために答えを更新しました。 – glytching

関連する問題