8

テンプレートとして使用したいmaven POMがあり、渡す引数に応じて異なる名前のアーティファクトを生成します。しかし、実行時に artifactId を指定する方法がわかりません。

<artifactId>次のように要素をパラメータ化すると:

<artifact>foo-${bar}</artifact>

メイヴンは不平を言う:

[警告] 'artifactId' には式が含まれていますが、定数である必要があります。

<artifactId>POMを省略して、コマンドラインで指定しようとすると

mvn -Dproject.artifactId=foo ...

メイヴンは不平を言う:

[エラー] 'artifactId' がありません。

テンプレートからオンザフライでPOMファイルを生成する以外に、これを達成するために使用できる別のトリックはありますか? [うーん、maven リソース フィルタリングを使用してそれを行うことができるかもしれません...]

4

3 に答える 3

6

うまくいけば、ブループリント Maven アプリケーションを再利用して、artifactId を変更できるようになります。

この使用例は、 Maven archetypesで最もよく実現できます。これを参照して開始してください。それはかなり簡単で、学ぶ価値があります。通常の Maven プロジェクトがあり${groupId}、ブループリント pom のように変数を追加します。これらは、アーキタイプの生成時に指定されたパラメーターに置き換えられます。

mvn archetype:generate                                  \
-DarchetypeGroupId=<archetype-groupId>                \
-DarchetypeArtifactId=<archetype-artifactId>          \
-DarchetypeVersion=<archetype-version>                \
-DgroupId=<my.groupid>                                \
-DartifactId=<my-artifactId>

GitHub には、Maven アーキタイプでの構造化とフィルタリングについて詳しく学ぶことができる人々によって作成されたアーキタイプがたくさんあります。

別の方法として、アーキタイプ システムを使用せずに Maven フィルタリングを設定することもできますが、私はその経験がありません。有効なartifactIdがないとプロジェクトを実行できないと思います.その前に何らかの生成が必要です(アーキタイプから生成する場合など)が、わかりません.

于 2012-06-08T20:05:13.920 に答える
0

あなたは、pomが安定したアーティファクトを生成する自己完結型のプロジェクトを表しているというMavenの原則に反しています(つまり、簡単に再現できないパラメトリックビルドを避けてください)。

それが本当に必要な場合は、maven-install-plugin をライフサイクル ステップ (具体的には install-file) として使用し、pom 自体の artifactId をパラメーター化するのではなく、それをパラメーター化します。

于 2012-06-08T21:10:16.967 に答える