Gradle(java):测试任务应使用生成的.jar而不是classpath中的.class文件

时间:2019-01-06 10:33:18

标签: java gradle

在build.gradle中具有apply插件的等级:'java'。该文件将创建一个.jar文件,并且测试任务正在运行junit测试:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
  testCompile 'junit:junit:4.12'
}

这正在工作。但是为了确保公共API测试可与生成的.jar文件一起使用,我希望'test'任务正在对classpath中build / libs文件夹中的生成.jar文件而不是生成.class文件运行测试。从文件夹构建/类在类路径中。

不工作,因为sourceSets设置为全局:

tasks.withType(Test) {
    sourceSets {
        main {
            java {
                exclude '**'
            }
        }
    }
}

部分工作:多项目(测试和jar分为两个gradle项目):

dependencies {
  compile project(":jar_project")
  testCompile 'junit:junit:4.12'
}

在这种情况下,将使用jar_project.jar,但程序包私有测试也将正确执行。

有人知道如何将.jar作为依赖项来运行测试,而忽略.class文件吗?

谢谢,纸浆

1 个答案:

答案 0 :(得分:0)

问题在于测试任务不依赖于jar任务,这之所以有意义是因为应该将jar打包在类中,所以测试应该没有理由依赖于那个jar。

您可以通过以下方式强制依赖:

test {
  dependsOn jar
  doFirst {
    classpath += jar.outputs.files
  }
}

现在jar将在测试类路径上