2011-02-07 11 views
0

私はMavenのに新たなんだ、とMavenサイトとSonatypeのオンラインMavenのブック上のドキュメントを読んだ後、私はまだ最高のものを整理する方法については明確ではありませんよ。MavenとEclipseのコード組織

mylibのコードを共有する2つのアプリAとBがあります。異なる開発者は、アプリAとアプリBで動作し、独立してリリースされます。 Eclipseでmavenを使い始める前に、アプリAとBとmylibを持つワークスペースがありました。アプリAのクラスパスにはmylibが含まれていました。私がmylibを変更した場合、Eclipse内でrunを押すと、私の最新の変更が含まれています。

はMavenので、私は、アプリAとMYLIBを参照する親のpom.xmlを作成することができます。しかし、これはmylibをアプリAのサブディレクトリにします。mylibのインスタンスを1つ保持し、アプリAとBのビルディングをリンクしないにはどうすればよいですか?

私たちは、SCMのためにSVNを使用して複数のオプションを持っている

おかげ

答えて

2

は、しかし、潜在的に最も簡単な方法は、独自のライフサイクルを持つ独自のMavenプロジェクトにMYLIBを分離することです。このアプローチの利点は、複数のバージョンのmylibとアプリケーションAとBが必要に応じて異なるバージョンのmylibを参照できるようサポートできることです。 EclipseでmylibとappAが開いている場合(そしてmylibが開いているmylibのバージョンを参照している場合)、Mavenを使用する前と同じ方法でアプリケーションを構築できます。

次のような何かを行くことができるように、このアプローチは、アプリケーションのディレクトリ構造間の依存関係を強制しない:

/myapps/MYLIB
/myapps/APPA
/myapps/APPB

このアプローチの欠点は、それらが別々のアプリケーションとして扱われるようにMavenを自動的APPAとMYLIB(又はAPPBとMYLIB)の両方を構築しないであろうということです。しかし、アプリケーションがmylibの事前定義されビルドされたバージョン( "mvn install"を使用してローカルのMavenリポジトリにアップロードされている)を使用している場合、これは大きな問題ではないかもしれません。ここで

は、これらのプロジェクトのためのPOMの例である:

MYLIB:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>myLib</artifactId> 
    <versioning>0.0.1</versioning> 
    <packaging>jar</packaging> 

    <name>mylib</name> 

    ... 
</project>

APPA:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>appA</artifactId> 
    <packaging>jar</packaging> 

    <name>appA</name> 
    ... 
    <dependencies> 
    <groupId>com.text</groupId> 
    <artifactId>mylib</artifactId</artifactId> 
    <version>0.0.1</version> 
    </dependencies> 
    ... 
</project>

APPB:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>appB</artifactId> 
    <packaging>jar</packaging> 

    <name>appB</name> 
    ... 
    <dependencies> 
    <groupId>com.text</groupId> 
    <artifactId>mylib</artifactId</artifactId> 
    <version>0.0.1</version> 
    </dependencies> 
    ... 
</project>

あなたはまだしたい場合親の利便性POM(1つのMVNのパッケージコメント)は、その後、次のような/ myappsフォルダ内のマスターPOMを作成することができます。

<project> 
    <groupId>com.test</groupId> 
    <version>0.0.1</version> 
    <artifactId>myapps</artifactId> 
    <packaging>pom</packaging> 
    <name>myapps</name> 
    <modules> 
    <module>shared</modules> 
    <module>appA</modules> 
    <module>appB</modules> 
    </modules> 
</project>

このPOMは自動的にmyappに、APPAとAPPBを構築します。必要に応じて、appAおよびappB固有のPOM(pom-appA.xml)を作成することもできます。これは、Mavenの観点からは最もクリーンなアプローチではありませんが、機能します。あなたが実行する唯一の問題は、mylibのバージョンがappAまたはappBが依存するバージョンでない場合です。その場合、あなたのappAまたはappBコードはあなたのMavenリポジトリ内のバージョンに対してコンパイルされます(そのバージョンが存在する場合)。

他にもたくさんのオプションがありますが、さまざまなシナリオではどのブログが最も優れているかについて、ブログやWikiに関する議論がたくさんあります。しかし、通常、それはあなたとあなたの組織に最適なものにまで下がります。それが動作していて、カスタムでポータブルではない移植ソリューションを構築していない限り、おそらく大丈夫です。

うまくいけば、これを使うことができます。

+0

ありがとう、これは役立ちます。私は手動でEclipseの.classpathファイルを編集してmylib(以前のように)を組み込み、Eclipseで期待どおりに動作します。 –