Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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_Gradle Task - Fatal编程技术网

Gradle 仅当运行特定任务时才执行任务

Gradle 仅当运行特定任务时才执行任务,gradle,gradle-task,Gradle,Gradle Task,我希望任务setupDB在且仅在任务fatJar或slimJar运行时执行 但是在添加gradle.taskGraph.whenReady之后,commandLine./scripts/configureSQLiteDB.sh'永远不会为任何任务运行 以下是我的setupDB任务代码: //download bigg.sqlite if not present task setupDB { gradle.taskGraph.whenReady { graph ->

我希望任务
setupDB
在且仅在任务
fatJar
slimJar
运行时执行

但是在添加
gradle.taskGraph.whenReady
之后,
commandLine./scripts/configureSQLiteDB.sh'
永远不会为任何任务运行

以下是我的setupDB任务代码:

//download bigg.sqlite if not present
task setupDB {
    gradle.taskGraph.whenReady { graph ->
        if (!project.file("resources/edu/ucsd/sbrg/bigg/bigg.sqlite").exists() 
                && (graph.hasTask(slimJar)|| graph.hasTask(fatJar))) {
            doFirst { 
                exec {
                    println "Setup DB"
                    commandLine './scripts/configureSQLiteDB.sh'
                } 
            }
        } 
    }
}
您还可以查看
build.gradle
文件:

apply plugin: "java"

defaultTasks "clean", "fatJar"
// Java versions for compilation and output
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
archivesBaseName = "ModelPolisher"

version = "1.7"

sourceSets {
    main.java.srcDirs = ["src"]
    main.resources.srcDirs = ["resources"]
    main.resources.excludes = ["**/bigg.zip"]
    test.java.srcDirs = ["test"]
}

repositories {
    mavenCentral()
    maven { url "http://www.ebi.ac.uk/~maven/m2repo" }
    maven { url "http://jsbml.sourceforge.net/m2repo/" }
    // local dependencies
    flatDir {
        dirs "lib/de/zbit/SysBio/1390"
    }
}

dependencies {
    compile "org.sbml.jsbml:jsbml:1.4"
    compile "de.zbit:SysBio:1390"
    compile "org.xerial:sqlite-jdbc:3.21.0"
    compile "org.postgresql:postgresql:42.2.2"
    compile "org.biojava:biojava-ontology:5.0.0"
    compile "com.diffplug.matsim:matfilerw:3.0.1"
    compile "com.fasterxml.jackson.core:jackson-core:2.9.9"
    compile "com.fasterxml.jackson.core:jackson-databind:2.9.9"
    testCompile "org.junit.jupiter:junit-jupiter-engine:5.1.0"
}

// config for all jar tasks
tasks.withType(Jar) {
    dependsOn test
    destinationDir = file("$rootDir/target")
    manifest {
        attributes(
                "Version": version,
                "Implementation-Title": "ModelPolisher",
                "Implementation-Version": version,
                "Specification-Vendor": "University of California, San Diego",
                "Specification-Title": "ModelPolisher",
                "Implementation-Vendor-Id": "edu.ucsd.sbrg",
                "Implementation-Vendor": "University of California, San Diego",
                "Main-Class": "edu.ucsd.sbrg.bigg.ModelPolisher"
        )
    }
}

// with dependencies
task fatJar(type: Jar) {
    baseName = project.name + "-fat"
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    with jar
}

//with dependencies, without bigg.sqlite
task lightJar(type: Jar) {
    exclude("**/bigg.sqlite")
    baseName = project.name + "-noDB"
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    with jar
}

// without dependencies and bigg.sqlite
task bareJar(type: Jar) {
    exclude("**/bigg.sqlite")
    baseName = project.name + "-slim-noDB"
    with jar
}

// without dependencies, bigg.sqlite included
// not included in release
task slimJar(type: Jar) {
    baseName = project.name + "-slim"
    with jar
}


// zip lib folder for release
task zipLibs(type: Zip) {
    from "lib"
    into "lib"
    include "**/**"
    archiveName = "lib.zip"
    destinationDir = file("target/")
}

// zip script files for release
task zipScripts(type: Zip) {
    from "scripts"
    into "scripts"
    include "**/**"
    archiveName = "scripts.zip"
    destinationDir = file("target/")
}

// create all three jars for release
task release() {
    dependsOn fatJar
    dependsOn bareJar
    dependsOn lightJar
    dependsOn tasks["zipLibs"]
    dependsOn tasks["zipScripts"]
    // necessary, as order is not defined by dependsOn
    bareJar.mustRunAfter classes
    // slimJar.mustRunAfter bareJar
    lightJar.mustRunAfter slimJar
    fatJar.mustRunAfter lightJar
}

// clean up target directory
clean.doFirst {
    file(".gradle").deleteDir()
    file("target").deleteDir()
}

//download bigg.sqlite if not present
task setupDB {
    gradle.taskGraph.whenReady { graph ->
        if (!project.file("resources/edu/ucsd/sbrg/bigg/bigg.sqlite").exists() 
                && (graph.hasTask(slimJar)|| graph.hasTask(fatJar))) {
            doFirst { 
                exec {
                    println "Setup DB"
                    commandLine './scripts/configureSQLiteDB.sh'
                } 
            }
        } 
    }
}

// bump jar version in travis.yml
if (project.file(".travis.yml").exists()) {
    task bumpVersionTravis() {
        replaceVersion(".travis.yml")
    }
    processResources.dependsOn bumpVersionTravis
}

// bump jar version in ModelPolisher.sh
if (project.file("./scripts/ModelPolisher.sh").exists()) {
    task bumpVersionMP() {
        replaceVersion("./scripts/ModelPolisher.sh")
    }
    processResources.dependsOn bumpVersionMP
}

def replaceVersion(path) {
    ArrayList<String> content = new ArrayList<>()
    File travisFile = new File(path)
    String MPVersion = /ModelPolisher.*\d{1,2}(.\d{1,2}){1,2}.jar/

    travisFile.eachLine {
        line ->
            content.add(line.replaceAll(MPVersion, "ModelPolisher-fat-" +
                    "${version}.jar"))
    }
    BufferedWriter writer = new BufferedWriter(new FileWriter(travisFile))
    content.each {
        line -> writer.writeLine(line)
    }
    writer.close()
}
apply插件:“java”
defaultTasks“clean”、“fatJar”
//用于编译和输出的Java版本
sourceCompatibility=“1.8”
targetCompatibility=“1.8”
archivesBaseName=“ModelPolisher”
version=“1.7”
源集{
main.java.srcDirs=[“src”]
main.resources.srcDirs=[“资源”]
main.resources.excludes=[“**/bigg.zip”]
test.java.srcDirs=[“test”]
}
存储库{
mavenCentral()
maven{url“http://www.ebi.ac.uk/~maven/m2repo“}
maven{url“http://jsbml.sourceforge.net/m2repo/" }
//局部依赖
弗拉蒂尔{
目录“lib/de/zbit/SysBio/1390”
}
}
依赖关系{
编译“org.sbml.jsbml:jsbml:1.4”
编译“de.zbit:SysBio:1390”
编译“org.xerial:sqlitejdbc:3.21.0”
编译“org.postgresql:postgresql:42.2.2”
编译“org.biojava:biojava本体:5.0.0”
编译“com.diffplug.matsim:matfilerw:3.0.1”
编译“com.fasterxml.jackson.core:jackson-core:2.9.9”
编译“com.fasterxml.jackson.core:jackson数据绑定:2.9.9”
testCompile“org.junit.jupiter:junitjupiter引擎:5.1.0”
}
//配置所有jar任务
tasks.withType(Jar){
德彭森试验
destinationDir=file($rootDir/target)
显示{
属性(
“版本”:版本,
“实施标题”:“ModelPolisher”,
“实施版本”:版本,
“规范供应商”:“加利福尼亚大学圣地亚哥分校”,
“规范标题”:“模型抛光机”,
“实施供应商Id”:“edu.ucsd.sbrg”,
“实施供应商”:“加利福尼亚大学圣地亚哥分校”,
“主要课程”:“教育、ucsd、sbrg、bigg、ModelPolisher”
)
}
}
//有依赖关系
任务fatJar(类型:Jar){
baseName=project.name+“-fat”
从{
configurations.compile.collect{
it.isDirectory()?it:zipTree(it)
}
}
用罐子
}
//有依赖项,没有bigg.sqlite
任务lightJar(类型:Jar){
排除(“**/bigg.sqlite”)
baseName=project.name+“-noDB”
从{
configurations.compile.collect{
it.isDirectory()?it:zipTree(it)
}
}
用罐子
}
//没有依赖项和bigg.sqlite
任务bareJar(类型:Jar){
排除(“**/bigg.sqlite”)
baseName=project.name+“-slim noDB”
用罐子
}
//如果没有依赖项,则包括bigg.sqlite
//不包括在发布中
任务slimJar(类型:Jar){
baseName=project.name+“-slim”
用罐子
}
//要发布的zip lib文件夹
任务zipLibs(类型:Zip){
来自“lib”
进入“自由”
包括“***/**”
archiveName=“lib.zip”
destinationDir=file(“target/”)
}
//要发布的zip脚本文件
任务ZipScript(类型:Zip){
来自“脚本”
变成“脚本”
包括“***/**”
archiveName=“scripts.zip”
destinationDir=file(“target/”)
}
//创建所有三个jar以供发布
任务发布(){
德彭森·法特贾尔
德彭森·巴雷贾尔
德彭森灯塔酒店
dependsOn任务[“zipLibs”]
dependsOn任务[“zipscript”]
//必要,因为dependsOn未定义订单
bareJar.mustRunAfter类
//slimJar.mustRunAfter bareJar
lightJar.mustRunAfter slimJar
fatJar.mustRunAfter lightJar
}
//清理目标目录
先打扫卫生{
文件(“.gradle”).deleteDir()
文件(“目标”).deleteDir()
}
//如果不存在,请下载bigg.sqlite
任务设置数据库{
gradle.taskGraph.whenReady{graph->
如果(!project.file(“resources/edu/ucsd/sbrg/bigg/bigg.sqlite”).存在()
&&(graph.hasTask(slimJar)| graph.hasTask(fatJar))){
doFirst{
执行官{
println“设置数据库”
命令行“/scripts/configureSQLiteDB.sh”
} 
}
} 
}
}
//travis.yml中的bump jar版本
如果(project.file(“.travis.yml”).exists()){
task bumpVersionTravis(){
替换版本(“travis.yml”)
}
processResources.dependsOn bumpVersionTravis
}
//ModelPolisher.sh中的bump jar版本
如果(project.file(“./scripts/ModelPolisher.sh”).exists()){
task bumpVersionMP(){
替换版本(“./scripts/ModelPolisher.sh”)
}
processResources.dependsOn bumpVersionMP
}
def替换版本(路径){
ArrayList内容=新建ArrayList()
File travisFile=新文件(路径)
字符串MPVersion=/ModelPolisher.*\d{1,2}(.\d{1,2}){1,2}.jar/
travisFile.eachLine{
行->
content.add(line.replaceAll)(MPVersion,“ModelPolisher fat-”+
“${version}.jar”))
}
BufferedWriter writer=new BufferedWriter(new FileWriter(travisFile))
内容{
行->writer.writeLine(行)
}
writer.close()
}

您似乎对gradle配置有错误的想法。您不应该根据输入更改任务行为。您应该配置任务之间的依赖关系,并配置任务输入/输出以控制“最新”行为

例如:

以下也是不好的做法

if (project.file(".travis.yml").exists()) {
    task bumpVersionTravis() {
        replaceVersion(".travis.yml")
    }
    processResources.dependsOn bumpVersionTravis
}
不应根据文件系统中的文件更改可用任务。无论您的文件系统如何,它们都应该始终存在。相反,您应该设置“enabled”标志(或使用任务输出)来控制任务是否执行或被跳过

例如:

if (project.file(".travis.yml").exists()) {
    task bumpVersionTravis() {
        replaceVersion(".travis.yml")
    }
    processResources.dependsOn bumpVersionTravis
}
task bumpVersionTravis {
    enabled = project.file(".travis.yml").exists()
    doLast {
       replaceVersion(".travis.yml")
    } 
}
processResources.dependsOn bumpVersionTravis