Gradle - 仅当测试通过时才创建 jar

Gradle - Create jar only if tests pass

提问人:Wes 提问时间:7/28/2016 最后编辑:Wes 更新时间:7/29/2016 访问量:2150

问:

我是 Gradle 的新手。我想操作以下build.gradle内容来执行此操作。我想在一个命令中同时执行这两个命令,而不是单独运行测试然后通过单独的命令构建 jar,除了如果其中一个测试失败,则不会创建 jar(它甚至不会尝试构建 jar)。

apply plugin: 'java'
apply plugin: 'eclipse'

version = '1.0'
sourceCompatibility = 1.6
targetCompatibility = 1.6

// Create a single Jar with all dependencies
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',  
            'Implementation-Version': version,
            'Main-Class': 'com.axa.openam'
    }

    baseName = project.name

    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it) 
        }
    }
}

// Get dependencies from Maven central repository
repositories {
    mavenCentral()
}

test {
    testLogging {
        showStandardStreams = true
    }
}

// Project dependencies
dependencies {
    compile 'com.google.code.gson:gson:2.5'
    testCompile 'junit:junit:4.12'
}

谢谢!

Java Gradle

评论


答:

10赞 Giuseppe Ricupero 7/29/2016 #1

最简单的解决方案是按顺序放置所有要执行的任务。因此,您可以使用以下内容:gradle

gradle clean test jar

任务分组

  • clean:这主要用于安全地移除最后一个过时的罐子(这不是强制性的);
  • test:执行测试;
  • jar:创建 JAR 工件。

关键点:如果其中一个任务由于某种原因失败,则停止其执行。gradle

因此,如果由于某种原因只有一个测试失败,则会引发异常,并且根本不会创建 jar 文件


替代解决方案:添加“test”作为“jar”的依赖项

只是为了探索其他一些可能性:按如下方式修改文件:build.gralde

[...]
jar {
    dependsOn 'test'
    [...]
}
[...]

现在,每次运行时,任务都会自动执行。gradle jartest


使用“dependsOn”模拟纯命令行解决方案

要使用依赖方法模拟第一种命令行方法(即 ),您必须进一步修改 .这是因为不能保证按顺序计算多个语句:gradle clean test jarbuild.gradledependsOn

[...]
jar {
    dependsOn 'clean'
    dependsOn 'test'
    tasks.findByName('test').mustRunAfter 'clean'
    [...]
}
[...]

现在您可以使用:

gradle jar

和任务都在实际任务之前执行(以正确的顺序)。cleantestjar