8

我正在使用 shadow Gradle 插件来构建 JAR,其中包含所有引用的 jar。

在我的build.gradle我只有

apply plugin: "com.github.johnrengelman.shadow"

jar {
    manifest {
        attributes 'Main-Class': 'MYCLASS'
    }

}

与此有关。我不知道,它是如何知道的,要构建什么,但它确实有效。

现在,是否也可以包含测试类?

4

2 回答 2

3

来自官方文档https://imperceptiblethoughts.com/shadow/custom-tasks/

隐藏测试源和依赖项

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar task testJar(type: ShadowJar) { classifier = 'tests' from sourceSets.test.output configurations = [project.configurations.testRuntime] }

上面的代码片段将生成一个包含主源和测试源以及所有运行时和 testRuntime 依赖项的阴影 JAR。该文件输出到 build/libs/--tests.jar。

于 2018-01-01T14:36:39.460 回答
2

官方文档似乎与插件的最新(v7.0.0)版本过时了。使用这个版本和最新版本的 gradle (7.0),我这样做:

task testJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
    archiveClassifier.set("alltests")
    from sourceSets.main.output, sourceSets.test.output
    configurations = [project.configurations.testRuntimeClasspath]
}

文档中的from子句和“配置”子句都错误。

  • 作为对其他答案的评论提到,jar中缺少主要类(通常是您正在测试的类),因此您需要添加sourceSets.main.output
  • project.configurations.testRuntime不像记录的那样工作,它告诉我testImplementation' is not allowed as it is defined as 'canBeResolved=false
于 2021-05-16T09:31:34.390 回答