5

私はgradleにかなり慣れていません。

同じプロジェクト ソースから複数の jar をビルドできるかどうかを知りたいです。以前の同様の質問を閲覧しましたが、私の状況は少し異なります。すべてのソース ファイルを 2 回コンパイルして、それぞれが異なる依存関係と異なるアーティファクト ID を持つ 2 つの異なる jar ファイルを生成したいと考えています。概念的には、次のように表すことができます。

  • プロジェクト「FooBase」
    • ソース/メイン/Java/...
    • ライブラリ Bar バージョン 1.0.0 に依存
    • すべてのソースをコンパイルし、"org.foo/Foo1" (グループ/アーティファクト) を生成します
  • プロジェクト「Foo2」
    • 独自のソースがないか、ソースを追加する可能性があります
    • ライブラリ Bar バージョン 2.0.0 に依存
    • 「FooBase」とそのソース内のすべてのソースをコンパイルし、「org.foo/Foo2」(グループ/アーティファクト)を生成します

この種のビルドはgradleで可能ですか? 最善のアプローチは何ですか?ありがとう!

4

1 に答える 1

6

目的を達成するためのクリーンな方法の 1 つは、2 つのサブプロジェクト (foobase と foo2) を持つマルチプロジェクト ビルドを作成することです。この場合、foo2 のソース セットは、独自のソースに加えて foobase のソース セットを含むように構成されます。

dependenciesアーティファクトのさまざまな依存関係を取得するには、サブプロジェクトでセクションを別の方法で宣言するだけです。

これをテストするために、各サブプロジェクトに 1 つの Java ファイルを含むマルチプロジェクト ビルドを作成しました。ここでの出力を簡略化するために、ルートbuild.gradleファイルには、サブプロジェクト固有のカスタマイズを含むすべてが含まれています。ただし、「実際の生活」では、常にサブプロジェクト固有の構成をbuild.gradle正しいサブプロジェクト レベルのファイルに入れます。

gradleビルドファイルには次が含まれます

  • foob​​ase から 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
于 2013-03-26T20:25:01.940 に答える