目的を達成するためのクリーンな方法の 1 つは、2 つのサブプロジェクト (foobase と foo2) を持つマルチプロジェクト ビルドを作成することです。この場合、foo2 のソース セットは、独自のソースに加えて foobase のソース セットを含むように構成されます。
dependencies
アーティファクトのさまざまな依存関係を取得するには、サブプロジェクトでセクションを別の方法で宣言するだけです。
これをテストするために、各サブプロジェクトに 1 つの Java ファイルを含むマルチプロジェクト ビルドを作成しました。ここでの出力を簡略化するために、ルートbuild.gradle
ファイルには、サブプロジェクト固有のカスタマイズを含むすべてが含まれています。ただし、「実際の生活」では、常にサブプロジェクト固有の構成をbuild.gradle
正しいサブプロジェクト レベルのファイルに入れます。
gradleビルドファイルには次が含まれます
- foobase から foo2 へのソースセットの追加
- 2 つのプロジェクトの異なる依存関係
- ローカル Maven リポジトリへのデプロイ (pom が正しく作成されていることを確認するため)
- IntelliJ IDEA および Eclipse 用のオプションの IDE プラグイン
全体として、私は次のようになりました。
プロジェクトの構造
build.gradle => root project build file
settings.gradle => specification of included subprojects
foo2\ => foo2 subproject folder
src\
main\
java\
Foo2.java => Empty class
foobase\ => foobase subproject folder
src\
main\
java\
FooBase.java => Empty class
settings.gradle
include ':foobase', ':foo2'
build.gradle
allprojects {
apply plugin: 'idea'
apply plugin: 'eclipse'
group = 'org.foo'
version = '1.0'
}
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
repositories {
mavenCentral()
}
uploadArchives {
it.repositories.mavenDeployer {
repository(url: "file:///tmp/maven-repo/")
}
}
}
project(':foobase') {
dependencies {
compile 'log4j:log4j:1.2.13'
}
}
project(':foo2') {
dependencies {
compile 'log4j:log4j:1.2.16'
}
sourceSets.main.java.srcDirs project(':foobase').sourceSets.main.java
sourceSets.main.resources.srcDirs project(':foobase').sourceSets.main.resources
sourceSets.test.java.srcDirs project(':foobase').sourceSets.test.java
sourceSets.test.resources.srcDirs project(':foobase').sourceSets.test.resources
}
リソースとテストのソース ディレクトリも追加したことに注意してください。必要がない場合は、最後の 3 行を省略できます。
ビルドを確認するには:
- 必要なすべてのクラスが 2 つの jar ファイルに含まれていることを確認します。
- デプロイされた 2 つの Maven pom に正しい依存関係があることを確認します。
私の場合:
foobase-1.0.jar
のみを含むFooBase.class
foo2-1.0.jar
との両方FooBase.class
を含むFoo2.class
- アップロードされたファイル
foobase-1.0.pom
には依存関係が含まれていますlog4j-1.2.13
- アップロードされたファイル
foo2-1.0.pom
には依存関係が含まれていますlog4j-1.2.16