2010-12-14 15 views
12

私は現在、「ポータル」のようなものを構成する同じアプリケーションサーバーに展開されるmavenでビルドする約16のプロジェクトを持っています。私は、共通の依存関係やプラグインの設定を処理する親pomを構築しました。現在、私のSVN構造は次のようになります。親pomとsvnレイアウトのマルチモジュールmavenプロジェクト

portal_root 
    +project1 
     +tags 
     +branches 
     +trunk 
    +project2 
     . 
     . 
     . 
    +projectn 
    pom.xml 

個々のプロジェクトはそれぞれ別々に配置されています。つまり、project1はproject2に依存せず、それぞれを変更して展開することができます。

これは、他の開発者がデフォルトですべてのタグとブランチのコピーをプルダウンする「ポータル」ルート全体(親のpomも取得する)をチェックアウトしたかったかのようにSVNに問題があります。本当に理想的ではない。

portal_root 
    +tags 
    +branches 
    +trunk 
     +project1 
       +src 
       pom.xml 
     +project2 
      . 
      . 
      . 
     pom.xml 

しかし、今、すべてのプロジェクトの変更、タグのフォルダに追跡されます:私は考えることができる

唯一の他の事は、このようなものを使用することです。これは私にとって大きな問題ではありませんが、現在は分岐が苦しいようです。

Teamcityをこれに接続する作業も現在、ビルドする必要があるすべてのものをキャッチするために単一のディレクトリ(タグなど)を見るだけで済むので、少し簡単になります。また、エンタープライズNessusリポジトリに成果物を展開しています。

ビルドのライフサイクル全体とベストプラクティスについて話しているまともなドキュメントが見つかりませんでしたので、ここでいくつかの提案をお願いしたいと思います。

私は単一のmavenコマンドですべてのプロジェクトをビルドして展開できるという考えが好きです。私はまた、すべての共通の依存関係、リポジトリ情報、およびプラグイン情報を1か所に持つことが好きです。

答えて

25

次のレイアウトを使用することができます。子供たちのプロジェクトでは

<modules> 
    <module>../child-project-1</module> 
    <module>../child-project-2</module> 
</modules> 

ポンポン追加します:親プロジェクトのPOMのアドオンで

+parent-project 
    pom.xml 
+child-project-1 
    pom.xml 
+child-project-2 
    pom.xml 

<parent> 
    <artifactId><!-- parent artifactId --></artifactId> 
    <groupId><!-- parent groupdId --></groupId> 
    <version><!-- parent version --></version> 
    <relativePath>../parent-project</relativePath> 
</parent> 

子どもプロジェクトは、必要に応じて依存することができます。

以下のリンクにも役立つことがあります。

+0

これは私の問題を完全に解決しました!ありがとう! – Casey

+0

子プロジェクトで親プロジェクトを使用する場合は、親データを依存関係として追加してください。 – cevaris

4

にあなたのサブプロジェクトの適切なトランク/タグ/枝をフックするsvn:externalsを使用するジョンズのアプローチに変化は次のようになります親プロジェクトの適切なトランク/タグ/ブランチ。このようにして、あなたの親の一変種をチェックアウトすると、他のプロジェクトのすべての正しいバージョンが取り出されます。

これは、すべてのプロジェクトを一緒にチェックアウトすることが合理的である場合にのみ意味があります。

+0

静かにdownvoteではなく、私のアプローチをコメントすることがより役に立ちます。このアプローチが、コードの相違を最小限に抑えながら過去4年間にいくつかの顧客固有のバージョンを扱うのを助けてくれたことを考慮すると、私は今何が間違っているのかを知ることに興味があります。 –

+1

私はsvn:externalsが本当にスマートであると思います。特に大企業のsvn reposでは特にそうです。そうすれば、リポジトリ全体の構造を変更することなく、必要に応じてディレクトリレイアウトを作成することができます。 – Sylar

関連する問題