1

我有一个(旧版)Java 项目,我正在重新配置它以使用 Gradle 构建。构建最终应该输出一些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关于某些类未解析的警告 - 指的是foobar导入到setOne. 我认为这是因为 Gradle 只提供setTwo对内置类的访问权限setOne- 但为什么它不能解决从setOne进程中导入的类的依赖关系?

如何正确设置?

4

1 回答 1

1

事实证明,这就像我认为的那样简单——如果你以正确的方式开始。定义

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

解决问题。

更新:

在可以做的依赖项之间做这件事似乎更好

dependencies {
    setTwo sourceSets.setOne.output
}

并让它工作。

于 2013-06-11T12:04:29.633 回答