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

2023-12-31

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

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

为了在 tar.gz 中创建空目录,我在 build 目录中创建它们,然后由 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'
}

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

task createDirectories {
  doLast {
    // do stuff
  }
}

其次,要创建您应该使用的目录mkdir方法:https://docs.gradle.org/current/userguide/working_with_files.html#sec:creating_directories_example 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

主程序.java

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

设置.gradle

rootProject.name = 'gradle-test'

构建.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 distTar, build/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但这需要outputcreateEmptyDirectories 任务为空(mkdir 不会将创建的目录添加到使用它的任务输出中,因此您必须明确)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 gradle 任务在构建期间执行时被跳过? 的相关文章

随机推荐

  • 如何使用MessageUI框架在iPhone上发送iMessage消息

    是否可以使用 iPhone 上的 MessageUI 框架从应用程序内部发送消息 或者 有 iMessage 的 URL 方案吗 使用 iOS 4 您可以从应用程序内部发送电子邮件和短信 使用 MessagUI 视图控制器 由于 iOS 5
  • 用于 Java 的 ANTLR4。如何显示词法分析中的错误

    如何在词法分析过程中显示错误列表 如果有 我尝试了以下方法 但我的输出是 org antlr v4 runtime ConsoleErrorListener 1026c84c 我写的代码 private static String erro
  • 开源 php docx 到 pdf 转换?

    是否有任何开源 PHP 工具可以用来将 doc docx 转换为 pdf 如果您有任何好的教程或工具 将不胜感激 我正在研究 phpLiveDocx 但看起来他们按月收费 或者也许是 php 或 linux 中的 odt 到 pdf 尝试
  • Oracle 10g 上的独占表(读)锁?

    有没有办法在 Oracle 10g 中独占锁定表以进行读取 我对Oracle不是很熟悉 所以我问了DBA 他说在Oracle中不可能锁定一个表来读取 我实际上正在寻找类似 SQL Server TABLOCKX HOLDLOCK 提示的内容
  • 单击标签不会单击 React 中的复选框?

    我创建了一个表单 用户可以在提交表单之前选择选项 我隐藏复选框display none我正在设计
  • Pandas:填充缺失日期的数据

    假设我有下表 ProdID Date Val1 Val2 Val3 Prod1 4 1 2019 1 3 4 Prod1 4 3 2019 2 3 54 Prod1 4 4 2019 3 4 54 Prod2 4 1 2019 1 3 3
  • 调用其他线程调用的函数时,线程未启动

    我正在使用线程来显示进度窗口 同时执行耗时的操作 for 循环 在该操作之后 我想停止线程 但是该方法 显示进度对话框 没有被调用 我在其他事件中使用相同的方法 效果很好 下面是代码 Private Sub TSBRSToLoc Click
  • sort/2、keysort/2 与 samsort/3、predsort/3

    ISO Prolog 提供sort 2 and keysort 2它依赖于术语顺序 7 2 通常称为 标准术语顺序 以不同顺序对列表进行排序的常见方法是映射每个元素El以某种方式将该列表转换为成对列表XKey El然后对该列表进行排序 最后
  • 用于多级查询的动态 Linq 表达式

    我想动态构建以下 Linq 表达式 我遇到的问题是我无法构建表达式树来容纳复杂的 Select Any 语句 我读过 为了使用方法 您实际上必须调用该方法 如下所示 Invoke Any 我需要动态构建的表达式 Expression
  • SVN:如何使用 subversion 使文件只读?

    我正在开发一个在 SVN 存储库中管理的大型 Web 项目 每次团队成员签出项目 或者我们在新的生产服务器上签出项目时 我们都必须修改该服务器的自定义配置文件 我有一个受修订控制的 config ini base 文件 我们不断更新最新的设
  • 如何在调整窗口大小时自动调整 BorderPane 上按钮的大小?

    我的 Java 水平为中级 对 JavaFX 还很陌生 我正在开发一个在 JavaFX 8 中使用 BorderPane 的应用程序 BorderPane 的底部有两个按钮 我想将按钮放置 对齐 BorderPane 底部的中心 但不知道执
  • jqGrid 树形网格与寻呼机

    我们如何使用 jqGrid 与寻呼机制作树形网格 我已经检查并尝试了演示 但它没有显示任何寻呼机 即使代码中有一个寻呼机 div 如何创建寻呼机 树形网格有一些局限性 有记录的 http www trirand com jqgridwiki
  • 使用 cx_Oracle 从引用游标检索列名

    在使用 cx Oracle 调用一个简单的存储过程时 我可以轻松地从该过程中获取数据 如下所示 db db class Sets up stuff etc conn db connect Returns a connection to th
  • 在网站上使用多种语言的最佳方式是什么?

    我想知道实现基于多语言模板的网站的最佳方法是什么 假设我想提供英语和德语网站 有一些不同的方法 我的兴趣主要是SEO 所以这对于搜索引擎来说是最好的方式 我经常看到的第一种方法是为每种语言使用不同的目录 例如 www example com
  • 记忆库模式和单元测试

    我已经看到了存储库模式的一些实现 非常简单直观 链接到 stackoverflow 中的其他答案 http www codeproject com Tips 309753 Repository Pattern with Entity Fra
  • VSTS 更改时区

    更改 VSTS 中的全球时区是否会影响现有任务 或者它只是一个显示选项 有一位客户正在考虑改变这一点 但担心这是否会影响现有项目 VSTS中有两个不同的时区 VSTS 帐户时区 VSTS 用户配置文件时区 VSTS 账户 TZ 在问题中 您
  • nltk-hook 无法找到 nltk_data

    当使用 pyinstaller 构建可执行文件时 我得到 无法找到 home usr nltk data 添加二进制文件和数据文件时 我几乎尝试了互联网上的所有解决方案 将 hook nltk py 文件更改为此 import os imp
  • 跳过(完整)暂存区域并直接提交文件或补丁?

    想象一下这样的场景 您正在开发一个需要接触大量文件的功能 并且您已经暂存了很多事情 还有很多未暂存的事情 例如调试代码 为自己记住要做的临时注释 撤消某些事情 并且不要忘记添加您还没有时间添加的位 然后您会看到必须进行的简单一行更改 但该更
  • 从 CSV 文件中去除空格

    我需要从我读取的 CSV 文件中去除空格 import csv aList with open self filename r as f reader csv reader f delimiter quoting csv QUOTE NON
  • 为什么我的 gradle 任务在构建期间执行时被跳过?

    我目前正在将应用程序从 Maven 迁移到 gradle 4 10 2 在 Maven 中 将生成一个 tar gz 文件 其中包含配置 依赖项和一些空目录 然后应用程序在运行时将使用这些目录 在 gradle 中 我使用分发插件通过 di