2

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

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

4

2 回答 2

2

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

sourceSets {
    test {
        runtimeClasspath -= configurations.compile
        // additionally try this:
        // compileClasspath -= configurations.compile
    }
}
于 2013-03-13T14:10:19.417 回答
1

javaee-api-6.0.jar 是一个格式错误的jar,它没有方法体,只有签名。所以在运行时无法使用它。所以你可以从你的测试类路径中排除这个特定的库:

configurations {
    testRuntime.exclude module: 'javaee-api'
}
于 2013-11-05T21:07:40.057 回答