如何使用来自另一个模块

时间:2016-06-27 13:18:57

标签: java eclipse testing gradle multi-project

我正在研究Apache Ant项目的演变,用Gradle编译它,我有不同的子项目集。

我的目标是将主项目的输出用作某些子项目的依赖项。全局配置如下:

MainProject:
 -> src/main/java
 -> src/main/resources
 -> src/test/java
 -> src/test/resources
 -> src/mocks/java

ChildProject1:
 -> src/main/java
 -> src/main/resources
 -> src/test/java
 -> src/test/resources
 -> src/mocks/java

主项目正确包含在子构建路径中,并且在Eclipse链接时可以正确找到所有链接。

我已将settings.gradle文件中的主项目包含在ChildProject及其在构建中的依赖项中:

dependencies {
    compile project(':MainProject')
}

我的问题是ChildProject需要来自mocks / java的输出才能编译,虽然看起来Gradle编译过程确实包含"默认"作为主/ java文件的输出,我收到一条错误消息,说明"符号"从模拟中找不到。

我在MainProject测试java文件编译中遇到类似的问题需要使用模拟,它通过添加来解决:

sourceSets {
    mocks {
        java {
            srcDir 'src/mocks/java'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
    test {
        compileClasspath += sourceSets.mocks.output
        runtimeClasspath += sourceSets.mocks.output
    }
}

模拟源正确添加到测试类路径中。

如何告诉我的ChilProject使用MainProject的模拟输出来编译测试?

1 个答案:

答案 0 :(得分:1)

我会试着指出你正确的方向。通常,您在Gradle中声明多项目依赖项,如下所示:

dependencies {
    compile project(':projA')
}

这个定义隐含地说使用default的{​​{1}}工件作为依赖。

我相信您想要的是使用projA依赖项的mock工件。这样做的方法是:

  1. 创建一个新的projA任务,以组合从jarmain sourceSet编译的类文件。

    mock
  2. 通过创建名为task mocksJar(type: Jar) { classifier 'mocks' group 'build' from sourceSets.main.output from sourceSets.mocks.output } 的新Gradle配置并指定要导出的工件来导出mock版本中的projA工件:

    mocks
  3. 使用扩展依赖语法在项目中导入需要configuration { mocks } artifacts.mocks mocksJar 的{​​{1}}配置:

    mocks