6

mvn install他のサブモジュールを構築/起動するとき(特にブランチを頻繁に切り替えるとき)に、サブモジュールの正確なバージョンがどのバージョンで使用されるかわからないように感じるため、マルチモジュールプロジェクトでの使用を避ける傾向があります。私はよく
使う傾向があります。mvn packagemvn verify

私は現在、 Mavenのベストプラクティスを使用したいFOSSプロジェクト(さらにMavenの原型)でこの問題に直面しています。 これは、他のモジュールに依存するwebappサブモジュールを備えたマルチモジュールプロジェクトであり、私が心配しているのは、(または)とともに開発が容易なことです。
mvn jetty:runjetty:start

現在、2つのプロファイルを定義しました。

  1. prod、デフォルトのものは、他のサブモジュールへの依存関係を宣言します。
  2. dev一方、他のモジュールに依存せjetty-maven-plugin、他のモジュールの出力ディレクトリをextraClasspathおよびとして追加してを構成しますresourcesAsCSV
    そうすれば、サーバーを停止することなく、Webアプリをリロードして、 mvn package一度だけすばやく繰り返すことができます。cd webapp && mvn jetty:start -Pdev

AFAICTは、まさにextraClasspathその目的のために追加されました(JETTY-1206)。
Maven 3を使用しているときにreactorビルドからモジュールを解決できる点を指摘しましたtomcat7-maven-plugin(そして、同じものをJettyに持ち込むための問題を提起しました:JETTY-1517)が、それではほとんど解決できません

devプロファイル内から他のサブモジュールへの依存関係を削除していなかった場合は、後でそれらの依存関係を使用しなくmvn installても、POMの検証が失敗しないように、最初に実行する必要がありました。jetty:start

だからここに私の質問があります:mvn install本当にそれは一般的ですか?または、リアクター内の依存関係をprodプロファイルにのみ配置するという私のアプローチはOKですか?

(私はとまったく同じ問題を抱えていることに注意してgwt-maven-pluginください。Tomcatに切り替えるように言わないでください。実際には機能しません。詳細はこちらをご覧ください)

4

3 に答える 3

1

mvn installは、特にマルチモジュールビルドとの関係で一般的です。これは、マルチモジュールビルドから単一のモジュールを実行する機会を与えるためです。

これは、次を使用して実現できます。

mvn -pl submodule LifeCycle
于 2012-05-21T14:40:11.703 に答える
1

回避策を見つけました(後から考えると論理的です):https ://jira.codehaus.org/browse/JETTY-1517?focusedCommentId = 306630&page = com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#コメント-306630

簡単に言うと、親モジュールでデフォルトでプラグインをスキップし、必要に応じて再度有効にします。

ただし、これはプラグインをスキップできる場合(つまり、skip構成がある場合)にのみ機能し、1つの特定のサブモジュールでのみ使用され、そのように実行する必要がある/実行したいプラグインごとに選択的に実行する必要があります(私の場合jetty:rungwt:run) 。

于 2012-08-21T09:56:33.670 に答える
0

私は自分のラップトップでほとんどの開発を行っています。私が現在取り組んでいるプロジェクトの場合、私のローカルリポジトリは実際には一時的な保管場所です。私はいつも走っmvn installています。アーティファクトをローカルリポジトリに配置することは、プロジェクト間でビルドされたアーティファクトを共有するための唯一の方法です。特に、同じマルチモジュールビルドに関連しているが、その一部ではない(すべきではない)プロジェクトで作業している場合はそうです。

開発が完了したら、共有SCMに変更をコミットし、Jenkinsにコードをビルドして共有リモートリポジトリにデプロイさせます。次に、ローカルリポジトリ内の変更されたプロジェクトを吹き飛ばして、次のビルドで新しくビルドされたアーティファクトをダウンさせるか、-Uを指定してMavenを実行して更新を強制します。

これは私にとってはうまくいきます、YMMV。

于 2012-05-22T02:39:41.410 に答える