为什么在构建期间执行我的gradle任务会被跳过?

克里斯蒂安·库尔曼

我目前正在将应用程序从Maven迁移到Gradle(4.10.2)。在maven中,将使用配置,依赖项和一些空目录生成tar.gz文件,然后在运行时由应用程序使用。

在gradle中,我使用distTar-Task使用发行插件创建tar.gz。

要在tar.gz中创建空目录,我在构建目录中创建它们,然后由distTar将它们复制到tar.gz中。

我设法通过创建一个createEmptyDirectories仅创建目录并完成该任务的任务来最终实现这一目标。distTar将取决于此任务,以便在我认为tar.gz之前创建目录。

createEmptyDirectories但是,在构建过程中始终会跳过此任务(使用gradle clean build):

:createEmptyDirectories (Thread[Daemon worker Thread 7,5,main]) started.

> Task :createEmptyDirectories 
Skipping task ':createEmptyDirectories' as it has no actions.

:createEmptyDirectories (Thread[Daemon worker Thread 7,5,main]) completed. Took 0.0 secs.

当我使用gradle createEmptyDirectories任务本身运行任务时,将正确执行:

> Configure project : 
build/mailmanager/var/rtc/command_control created[true]
build/mailmanager/var/rtc/resources created[true]
build/mailmanager/var/log created[true]

我究竟做错了什么?是否有更好的方法将这些空目录放入tar?

这是我的build.gradle:

    buildscript {
    dependencies {
        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.8'
        classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.15'
    }
}

plugins {
    id 'org.asciidoctor.convert' version '1.5.3'
    id 'java'
    id 'distribution'
}


group = 'de.printcom'
version = '4.4.0'
description = 'MailManager'

sourceCompatibility = 1.8
targetCompatibility = 1.8

//mainClassName = 'de.printcom.mailmanager.StartManagerWithoutUi'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}


task('createEmptyDirectories') {
    dependsOn jar

    boolean created =  new File(project.buildDir.name + "/mailmanager/var/rtc/command_control").mkdirs()
    System.println(project.buildDir.name + "/mailmanager/var/rtc/command_control created[" + created + "]")

    created = new File(project.buildDir.name + "/mailmanager/var/rtc/resources").mkdirs()
    System.println(project.buildDir.name + "/mailmanager/var/rtc/resources created[" + created + "]")

    created = new File(project.buildDir.name + "/mailmanager/var/log").mkdirs()
    System.println(project.buildDir.name + "/mailmanager/var/log created[" + created + "]")
}

distTar {
    dependsOn check, createEmptyDirectories
    compression = Compression.GZIP
    extension = 'tar.gz'
}

distributions {
    main {
        contents {
            into("mailmanager/lib") {
                from jar
                from configurations.runtime
                fileMode = 744
            }

            from("src/main/scripts/release_preprocessing/Release_4_3_0/Preprocessing") {
                into("mailmanager/sql")
                fileMode = 750
            }
            from("src/main/scripts/release_preprocessing/Release_4_3_0/Rollback") {
                into("mailmanager/sql")
            }
            from("src/main/scripts/") {
                include("startup.sh")
                into("mailmanager/bin")
            }
            from("src/main/scripts/commands") {
                include("*.mmc")
                into("mailmanager/commands")
                fileMode = 640
            }
            from("src/main/scripts/configuration") {
                include("*.mmc")
                into("mailmanager/commands")
                fileMode = 640
            }
            from("src/main/resources/properties/deploy") {
                include("default.properties", "live.properties", "test.properties", "wallet_example.properties")
                into("mailmanager/conf")
                rename("default.properties", "default.properties.template")
                rename("live.properties", "live.properties.template")
                rename("test.properties", "test.properties.template")
                rename("wallet_example.properties", "wallet_example.properties.template")
                fileMode = 640
            }
            from("src/main/resources") {
                include("quartz.properties", "ehcache.xml")
                into("mailmanager/conf")
                fileMode = 640
            }
            from(project.buildDir.name + "/classes") {
                include("log4j-updated.xml")
                into("mailmanager/conf")
                rename("log4j-updated.xml", "log4j.xml")
                fileMode = 644
            }
            from(project.buildDir.name + "/resources/main/version.html") {
                include("version.html")
                into("mailmanager")
                fileMode = 644
            }
            from("README.txt") {
                into("mailmanager")
                fileMode = 644
            }
            from("KnownBugs.txt") {
                into("mailmanager")
                fileMode = 644
            }
            from("ReleaseNotes.txt") {
                into("mailmanager")
                fileMode = 644
            }
            into("mailmanager/docs") {
                from asciidoctor
                include("Handbuch.pdf")
                fileMode = 644
            }
            into ("var") {
                from createEmptyDirectories
                include("rtc/command_control")
                include("rtc/resources")
                include("log")
                fileMode = 644
                includeEmptyDirs=true
            }
//            from(project.buildDir.name + "/mailmanager/var") {
//                include("rtc/command_control")
//                include("rtc/resources")
//                include("log")
//                into("var")
//                fileMode = 644
//                includeEmptyDirs=true
//            }
        }
    }
}

asciidoctorj {
    version = '1.5.5'
}

asciidoctor {
    backends 'pdf'
    attributes 'build-gradle': file('build.gradle'),
            'sourcedir': 'src/docs/asciidoc',
            'source-highlighter': 'coderay',
            'imagesdir': 'images',
            'toc': 'left',
            'icons': 'font',
            'setanchors': '',
            'idprefix': '',
            'idseparator': '-',
            'docinfo1': '',
            'revnumber': project.version,
            'revdate': getDate()
}

def getDate() {
    new Date().format('d.MM.yyyy')
}

test {
    testLogging {
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

dependencies {
    compile group: 'commons-lang', name: 'commons-lang', version: '2.6'
    compile group: 'commons-io', name: 'commons-io', version: '2.4'
    compile group: 'commons-codec', name: 'commons-codec', version: '1.10'
    compile group: 'org.apache.ant', name: 'ant', version: '1.9.6'
    compile group: 'org.antlr', name: 'antlr', version: '3.5.2'
    compile group: 'javax.el', name: 'javax.el-api', version: '2.2.4'
    compile group: 'org.glassfish.web', name: 'javax.el', version: '2.2.4'
    compile group: 'org.apache.commons', name: 'commons-email', version: '1.5'
    compile group: 'org.apache.commons', name: 'commons-compress', version: '1.17'
    compile group: 'org.projectlombok', name: 'lombok', version: '1.18.2'
    compile group: 'com.google.guava', name: 'guava', version: '18.0'
    compile group: 'javax.annotation', name: 'jsr250-api', version: '1.0'
    compile group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.1.0'
    compile group: 'org.springframework', name: 'spring-core', version: '4.1.7.RELEASE'
    compile group: 'org.springframework', name: 'spring-beans', version: '4.1.7.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version: '4.1.7.RELEASE'
    compile group: 'org.springframework', name: 'spring-jdbc', version: '4.1.7.RELEASE'
    compile group: 'org.springframework', name: 'spring-tx', version: '4.1.7.RELEASE'
    compile(group: 'org.springframework', name: 'spring-context', version: '4.1.7.RELEASE') {
        exclude(module: 'commons-logging')
    }
    compile group: 'org.springframework', name: 'spring-context-support', version: '4.1.7.RELEASE'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '4.3.10.Final'
    compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '4.3.10.Final'
    compile group: 'org.hibernate', name: 'hibernate-c3p0', version: '4.3.10.Final'
    compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '4.3.10.Final'
    compile group: 'org.hibernate.common', name: 'hibernate-commons-annotations', version: '4.0.5.Final'
    compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.1-api', version: '1.0.0.Final'
    compile group: 'org.hibernate', name: 'hibernate-validator', version: '4.3.2.Final'
    compile group: 'javax.validation', name: 'validation-api', version: '1.1.0.Final'
    compile group: 'net.sf.ehcache', name: 'ehcache-core', version: '2.6.11'
    compile group: 'com.mchange', name: 'c3p0', version: '0.9.5.1'
    compile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.0'
    compile group: 'dom4j', name: 'dom4j', version: '1.6.1'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.12'
    compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
    compile(group: 'org.quartz-scheduler', name: 'quartz', version: '2.2.1') {
        exclude(module: 'c3p0')
    }
    compile group: 'org.quartz-scheduler', name: 'quartz-jobs', version: '2.2.1'
    compile group: 'com.cronutils', name: 'cron-utils', version: '5.0.5'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.36'
    compile group: 'hsqldb', name: 'hsqldb', version: '1.8.0.10'
    compile group: 'com.oracle', name: 'ojdbc7', version: '12.1.0.2'
    compile group: 'com.oracle', name: 'oraclepki', version: '12.1.0.2'
    compile group: 'com.oracle', name: 'osdt_cert', version: '12.1.0.2'
    compile group: 'com.oracle', name: 'osdt_core', version: '12.1.0.2'
    compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.12'
    compile group: 'log4j', name: 'log4j', version: '1.2.17'
    testCompile group: 'com.h2database', name: 'h2', version: '1.4.193'
    testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '4.12.2'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.0.0'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.0.0'
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.0.0'
    testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.0.2'
    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.19.1'
    testCompile group: 'com.github.stefanbirkner', name: 'system-rules', version: '1.16.0'
    testCompile group: 'net.jodah', name: 'concurrentunit', version: '0.4.2'
    testCompile group: 'org.springframework', name: 'spring-test', version: '4.1.7.RELEASE'
    testCompile group: 'org.assertj', name: 'assertj-core', version: '3.2.0'
    testCompile(group: 'org.dbunit', name: 'dbunit', version: '2.5.1') {
        exclude(module: 'junit')
    }
    testCompile group: 'com.github.springtestdbunit', name: 'spring-test-dbunit', version: '1.2.1'
    testCompile group: 'pl.pragmatists', name: 'JUnitParams', version: '1.0.5'
    testCompile group: 'com.tngtech.archunit', name: 'archunit', version: '0.8.0'
}
Strelok

第一件事:您应该将您希望任务执行的自定义内容包装在doLast { ... }闭包中。

task createDirectories {
  doLast {
    // do stuff
  }
}

其次,要创建目录,您应该使用以下mkdir方法:https : //docs.gradle.org/current/userguide/working_with_files.html#sec : creating_directories_example该方法默认将在主项目目录下创建目录。

因此,您的任务应变为:

task createEmptyDirectories {
    dependsOn jar
    doLast {
      mkdir "mailmanager/var/rtc/command_control"
      mkdir "mailmanager/var/rtc/resources"
      mkdir "mailmanager/var/log"
    }
}

这是一个可以满足您的需要的工作示例:

目录结构(非常基础)

gradle-test
  src/main/java/Main.java
  build.gradle
  settings.gradle

Main.java

public class Main {
  public static void main(String[] args) {
    System.out.println("Hello world");
  }
}

settings.gradle

rootProject.name = 'gradle-test'

build.gradle

apply plugin: 'java'
apply plugin: 'distribution'

task createEmptyDirectories {
    doLast {
        mkdir 'var/test'
    }
}

distTar.dependsOn createEmptyDirectories

distributions {
    main {
        contents {
            into('lib') {
                from jar
            }
            into('var') {
                from 'var'
            }
        }
    }
}

运行后gradle distTarbuild/distributions/gradle-test.tar将产生。

gradle-test> tar tvf build/distributions/gradle-test.tar

drwxr-xr-x  0 0      0           0  1 Nov 00:51 gradle-test/
drwxr-xr-x  0 0      0           0  1 Nov 00:51 gradle-test/lib/
-rw-r--r--  0 0      0         684  1 Nov 00:44 gradle-test/lib/gradle-test.jar
drwxr-xr-x  0 0      0           0  1 Nov 00:51 gradle-test/var/
drwxr-xr-x  0 0      0           0  1 Nov 00:45 gradle-test/var/test/

如您所见,jar文件位于lib文件夹中,并/var/具有所需的目录结构。希望这一点可以弄清楚。现在可能对您不起作用,因为您正在使用from createEmptyDirectories它,但是它占用了createEmptyDirectories任务输出,该任务为空(mkdir不会将创建的目录添加到使用该任务的任务输出中,因此必须明确)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的构建脚本中不能使用gradle任务connectedDebugAndroidTest?

为什么我的Promise定义会被执行?

为什么我的Gradle任务总是运行?

gradle-当我执行任务时,为什么还要调用配置阶段

为什么在gradle构建期间找不到AppCompatActivity?

grunt-watch正在跳过我的某些任务,为什么?

为什么当我的条件为true时我的if循环会被跳过?

为什么我的Gulp构建任务设置不正确?

无论我用什么,我的输入都会被跳过

为什么我的Visual Studio Code任务没有执行?

cobertura + gradle-为什么我不能运行cobertura任务?

Gradle构建:任务':app:lint'的执行失败

gradle构建后执行任务

从任何位置执行gradle构建任务

为什么我的 gradle 构建失败?(找不到方法 apt())

为什么在我构建项目时gradle消除了依赖

为什么我的模型限制会被忽略?

为什么我的*超时设置会被忽略?

为什么我的MacBook Pro会被磁化?

在构建期间无法通过Java使gradle任务传递值

在自定义任务中执行Gradle构建任务

防止gradle跳过任务

为什么在printfs调用期间执行mmap?

为什么在我的Cubit LoadedState中的Dart中代码无法执行并被跳过?

为什么我的gradle构建失败,但是gradlew构建成功?

我的静态方法似乎可以通过重用更快地执行。为什么?它会被缓存吗?

任务':app:processDebugResources'的执行失败。Gradle构建失败

Android Studio:Gradle-构建失败-任务':dexDebug'的执行失败

Gradle 3.0构建错误:任务':app:transformClassesWithDesugarForDebug'的执行失败