2012-06-08 10 views
7

私はテンプレートとして使用したいMaven POMを持っていますが、どの引数を渡すかによって異なる名前のアーティファクトが生成されます。しかし、私は実行時にartifactIdを指定する方法を理解できません。実行時にmaven project.artifactIdを指定できますか?

私はこのような<artifactId>要素パラメータ化する場合:

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

Mavenを文句:

[WARNING] 'たartifactIdは' 式が含まれていますが、一定でなければなりません。私はPOMで<artifactId>を除外し、

mvn -Dproject.artifactId=foo ... 

達人が不平を言うと、コマンドラインでそれを指定しようと

[ERROR] 'たartifactId' は不足しています。

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

答えて

5

もし私が正しいと思えば、青写真のMavenアプリケーションを再利用し、artifactIdを変更できるようにします。

このユースケースは、Mavenアーキタイプで最も効果的です。 this to get you startedを参照してください。それはかなり前進し、学習価値があります。通常のMavenプロジェクトがあり、${groupId}のような変数を青写真のpomに追加します。そして、彼らは原型の世代であなたによって与えられたパラメータに置き換えます:

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

はまた、あなたがMavenの原型For exampleに構造化とフィルタリングについての詳細を学ぶことができますGitHubの上の人が作成した原型がたくさんあります。

また、archetypeシステムを使用せずにMavenフィルタリングを設定しようとすることもできますが、その経験はありません。私はあなたが有効なアーティファクトを持っていないプロジェクトを実行できるとは思っていません。いくつかの世代は(アーキタイプから生成する場合のように)起こるはずですが、わかりません。

+0

ありがとう、これは良いフィット感のようです。すべてのMavenの質問のように、「そこにはプラグインがあります」という形の回答があります:-)私は、Mavenフィルタリングを使用するという考えは、貧しい人のアーキタイプのようなものに終わってしまったはずだと思うので、車輪を改造する代わりに実績のあるものに行くのが理にかなっています。 –

+0

私は、アーキタイプが行く方法であることに同意しますが、本当にその質問に答えるわけではありません。たとえそれが全く悪い習慣であっても、実行時にartifactIdを設定することは可能ですか? – dokaspar

0

ポームは、安定したアーティファクトを生成する自己完結型プロジェクトを表すと考えられています(つまり、簡単に再現できないパラメトリックなビルドは避けてください)。

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

+0

フィードバックいただきありがとうございます。私のビルドはもう少しパラメータ化されています(コマンドラインや環境などからプロパティを取得するための組み込みサポートを考えれば、これをあまりにも抑えることはできません)。しかし、私は確信してmaven新人です。私がしなければならないことは、「工場」プロジェクトをとり、それだけでもわずかに異なる多くのバリエーションを構築し、異なるアーティファクトを作り出すことです。私はinstall-fileを見ていきます。 –

関連する問題