Почему моя задача gradle пропускается при выполнении во время сборки? - PullRequest
0 голосов
/ 23 октября 2018

В настоящее время я переносю приложение из maven в gradle (4.10.2).В maven будет создаваться tar.gz-файл с конфигурацией, зависимостями и некоторыми пустыми каталогами, которые затем будут использоваться приложением во время выполнения.

В Gradle я использую плагин распространения для создания tar.gz используя distTar-Task.

Чтобы создать пустые каталоги внутри 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'
}

1 Ответ

0 голосов
/ 23 октября 2018

Во-первых: вы должны обернуть пользовательские вещи, которые вы хотите, чтобы ваша задача выполняла в закрытии 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 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, но для этого требуется output задачи createEmptyDirectories, которая пуста (mkdir не добавляет созданные каталоги к выводам задач, где она используется,так что надо быть явным)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...