Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于gradle的依赖关系管理_Gradle - Fatal编程技术网

基于gradle的依赖关系管理

基于gradle的依赖关系管理,gradle,Gradle,我有一个如下的gradle构建脚本 apply plugin: 'java' sourceSets { test { java { srcDir 'tests' } } main{ java {srcDir 'web-schedule\\src'} } } repositories { mavenCentral() } dependencies { compile 'j

我有一个如下的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'

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

我不明白为什么您必须删除除前两个之外的所有依赖项来编译生产代码,因为这里不涉及
testRuntime
配置。不确定是否必须删除前两个依赖项才能进行测试编译,但必须删除它们才能执行测试。以下是我将尝试的:

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

javaee-api-6.0.jar是一个格式不正确的jar,它没有方法体,只有签名,所以不可能在运行时使用它。因此,您可以从测试的类路径中排除此特定库:

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

到底是什么问题?您现在手动执行的是什么操作?一些
testRuntime
依赖项可能应该使用
testCompile
。请注意,Gradle目前不支持Maven bom(如
arquillian bom
)-您必须单独列出依赖项。问题是,对于编译,我需要删除除前两个之外的所有依赖项,然后对于测试编译和执行,我需要删除前两个,但保留所有其他依赖项。我不想手动操作,我只想正确配置构建脚本,一次点击就完成了。感谢BOM,我将尝试删除它。我每次都需要删除其中的一些,因为
'org.jboss.weld:weld api:1.1.Final'
'javax:javaee api:6.0'
不兼容。这并不能解释为什么编译生产代码时必须删除任何内容。现在我检查一下了解一些事情,并找出所有依赖项在编译时不会相互干扰,而是在运行时相互干扰。更准确地说是前两个。但它们需要汇编@peter我还检查了您的建议,但它不起作用。我需要更多信息来帮助您(准确的错误消息、堆栈跟踪、日志输出、渐变版本等)。您应该做的第一件事是检查编译依赖项是否从测试运行时类路径中正确删除。例如:
task debug所以,基本上你是在编写编译类路径。我做了以下操作:
sourceset{main{java{srcDir'web schedule\\src'}}test{java{srcDir'tests'}runtimeClasspath-=configurations.compile}
它突然开始工作。我检查类路径,它就好像我需要它一样。谢谢