2013-03-13 83 views
2

依赖管理我有以下gradle这个构建脚本与gradle这个

apply plugin: 'java' 

sourceSets { 
    test { 
     java { 
      srcDir 'tests' 
     } 
    } 
    main{ 
     java {srcDir 'web-schedule\\src'} 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 

    compile 'javax:javaee-api:6.0' 
    compile 'javax:javaee-web-api:6.0' 

    testRuntime 'org.jboss.arquillian:arquillian-bom:1.0.3.Final' 
    testRuntime 'org.jboss.arquillian.junit:arquillian-junit-container:1.0.3.Final' 
    testRuntime 'org.jboss.arquillian.container:arquillian-glassfish-remote-3.1:1.0.0.CR3' 
    testRuntime 'junit:junit:4.+' 
    testRuntime 'org.jboss.weld:weld-api:1.1.Final' 

} 

我试图实现与gradle这个全自动的编译和测试执行。 基本问题是库依赖关系。对于编制项目本身没有测试中,我只需要遵循库

compile 'javax:javaee-api:6.0' 
compile 'javax:javaee-web-api:6.0' 

但对于测试编译我还需要所有的休息。但是在测试编译过程中,如果我拥有它,它会引发异常。我发现该解决方案从测试编译和执行过程中排除它。现在我手动做。我想实现的是完全自动完成的。我需要做什么。

+0

究竟是什么问题?你现在在做什么手动操作?一些'testRuntime'依赖关系可能应该使用'testCompile'来代替。请注意,Gradle目前不支持Maven BOM(如'arquillian-bom') - 您必须单独列出依赖关系。 – 2013-03-13 13:23:25

+0

问题是编译我需要除去前两个除去所有的依赖关系,然后进行测试编译和执行我需要删除前两个,但留下所有其余的。我不想手动去做,我只是想正确地配置构建脚本,并且只需点击一下即可完成。 – maxormo 2013-03-13 13:47:50

+0

谢谢关于BOM我会尽力删除它。 – maxormo 2013-03-13 13:48:15

回答

2

我不明白为什么你必须删除除编译生产代码的前两个之外的所有依赖项,因为testRuntime配置没有涉及到那里。不知道您是否必须删除测试编译的前两个依赖关系,但您必须删除它们才能执行测试。以下是我想尝试:

sourceSets { 
    test { 
     runtimeClasspath -= configurations.compile 
     // additionally try this: 
     // compileClasspath -= configurations.compile 
    } 
} 
+0

我需要每次删除它们中的一些,因为 ''org.jboss.weld:weld-api:1.1.Final''和 ''javax:javaee-api:6.0' 'javax:javaee-web-api: 6.0'' 不兼容。 – maxormo 2013-03-13 14:36:16

+0

这并不能解释为什么你必须删除任何用于编译生产代码的东西。 – 2013-03-13 14:54:14

+0

现在我检查了一些东西,发现所有的依赖不会互相干扰编译,但是为了运行。更确切地说,前两个。但他们需要编译。 @peter我也检查你的建议,它不工作 – maxormo 2013-03-13 15:10:51

1

的JavaEE-API-6.0.jar是一个畸形的罐子,它没有方法体,只有signatures.So它不可能在运行时使用它。因此,您可以从测试的类路径中排除此特定的库:

configurations { 
    testRuntime.exclude module: 'javaee-api' 
}