2015-02-06 53 views
0

我想为我的新项目创建结构,我打算用Gradle构建它。我已经知道,如果我将源代码和测试放置在一个项目中,像MoreUnit这样的插件可以轻松处理它,并在我想要的地方为我的类创建测试。1个Eclipse项目,2个带Gradle的工件

但是,当我的项目由多个子项目组成时,会产生一些尴尬的依赖性问题,这取决于彼此 - 准确地说,当我想在项目A的测试中使用一些通用代码,然后在项目BI的测试中重用它时,必须不喜欢

project(':B') { 
    // ... 
    dependencies { 
    // ... 
    if (noEclipseTask) { 
     testCompile project(':A').sourceSets.test.output 
    } 
    } 
} 

一些解决方法,有时也有一些评价的问题,所以另一个黑客已经被引入:

project(':B') { 
    evaluationDependsOn(':A') 
} 

拆分此为2个独立的项目摆脱了这个问题,但随后MoreUnit不再是能够跟踪应该创建新测试文件的位置,并标记哪些方法已经过测试。我还没有在MoreUnit配置中找到任何可以解决这个问题的方法,所以我试图从Gradle方面解决这个问题。

我们可以安排一些东西,让我可以有几个子项目,源代码和测试以类似方式排列(project/src/java,project/test/java),但测试和源代码将创建单独的工件?如果我解决了错误的问题,那么我应该如何解决这个问题?

回答

1

您可以像常见创造一些testenv罐子:

sourceSets { 
    testenv { 
     compileClasspath += main.output 
     runtimeClasspath += main.output 
    } 
} 

configurations { 
    testenvCompile { 
     extendsFrom runtime 
    } 
    testCompile { 
     extendsFrom testenvRuntime 
    } 
    testenvDefault { 
     extendsFrom testenvRuntime 
    } 
} 

task testenvJar(type: Jar, group: 'build', description: 'Assembles a jar archive containing the testenv classes.') { 
    from sourceSets.testenv.output 

    appendix = 'testenv' 

    // add artifacts to testenvRuntime as task 'jar' does automatically (see JavaPlugin#configureArchivesAndComponent:106 and http://www.gradle.org/docs/current/userguide/java_plugin.html, "Figure 23.2. Java plugin - dependency configurations") 
    configurations.testenvRuntime.artifacts.add new org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact(testenvJar) 
} 

task testenvSourcesJar(type: Jar, group: 'build', description: 'Assembles a jar archive containing all testenv sources.') { 
    from sourceSets.testenv.allSource 

    appendix = 'testenv' 
    classifier = 'sources' 
} 

artifacts { 
    archives testenvJar 
    archives testenvSourcesJar 
} 

,并用它在你的依赖项目,如

testCompile project(path: ':common', configuration: 'testenvDefault') 

我希望这有助于!

+0

感谢您的回复!我有一些疑虑,我想解决。通常,你的意思是我想在测试项目中分享的测试代码?您的解决方案是否应用于1-project-with-src-and-test或2-separate-project方法?应该将第一段代码放在根项目级还是在commons项目中? – 2015-02-08 13:59:52

+0

以上所有代码都可以应用于生成common-v1.0.jar和common-testenv-v1.0.jar的公共项目。两者都可以用于他们的目的... – 2015-02-09 08:45:29