1

Gradle でビルドするように再構成している (レガシー) Java プロジェクトがあります。ビルドは最終的に多数のjarアーカイブを出力するはずなので、出力をアーカイブに分割することに対応するソース セットにソースを分割するようにしました。

ファイル ツリーは次のようになります。

- project root
    - src
        - setOne
             - java
                  - ...
             - resources
                  - ...
        - setTwo
             - java
                  - ...
        - setThree
             - java
                  - ...
             - resources
                  - ...
        - test
             - java
                  - ...

    - build.gradle

そして、build.gradle私は次のものを持っています:

apply plugin: 'java'

sourceSets {
    setOne
    setTwo {
        compileClasspath += setOne.output
    }
    setThree

    test
}

dependencies {
    setOne group: 'foo', name: 'bar', version: '1.0'
}

// Setup dependencies so that compileJava compiles all source sets
// while avoiding cyclic dependencies for main and test
sourceSets.matching { ss -> 
    !(ss.getName().contains('test') || ss.getName().contains('main')) 
}.each { ss ->
    compileJava.dependsOn ss.getCompileJavaTaskName()
}

これをビルドしようとすると、いくつかのクラスが解決されていないという警告がターゲットから大量に表示されます - にインポートされcompileSetTwoJavaたライブラリのクラスを参照しています。これは、Gradle が組み込みのクラスにしかアクセスできないためだと思いますが、プロセスでインポートされたクラスの依存関係を解決できないのはなぜですか?foobarsetOnesetTwosetOnesetOne

これを正しく設定するにはどうすればよいですか?

4

1 に答える 1

1

正しい方法で始めれば、これは私が思っていたのと同じくらい簡単であることがわかりました。定義する

setTwo {
    classPath += setOne.runtimeClasspath // instead of setOne.output
}

問題を解決します。

アップデート:

できる場合は、依存関係の中でそれを行う方がさらに良いようです

dependencies {
    setTwo sourceSets.setOne.output
}

そしてそれを機能させます。

于 2013-06-11T12:04:29.633 に答える