file - 自定义Gradle “Copy”任务将复制过时的类

标签 file gradle copy task

我目前正在将Ant脚本迁移到其相应的Gradle版本。
除自定义复制任务外,一切工作正常,该任务负责将生成的jar文件从build / libs复制到另一个目录(项目外)。

如果在第一次构建后,我在任何java文件中引入了更改,并尝试执行

gradle clean build deploy

我看到build / classes * .class文件已正确更新,并且build / libs / template-util.jar也是如此。但是,复制到/ home / fbudassi / Downloads的文件template-util.jar具有(大多数时候)该类的旧版本。有时,经过一些更改(我真的不知道在哪里,因为我尝试了很多事情),所以复制的jar会正确更新。

这是我的build.gradle:
apply plugin: 'java'
apply plugin: 'eclipse'

// Default task.
defaultTasks 'deploy'

// Configuration parameters.
group = 'com.rcs.template'
version = 'master'
sourceCompatibility = 1.7
targetCompatibility = 1.7

ext {
    // Manifest extra parameters.
    projectName = 'Template Util'
    vendor = 'Rotterdam Community Solutions'
    buildNumber = 10
    jarName = 'template-util.jar'

    // Dependencies versions.
    jacksonVersion = '2.6.0'

    // Deploy destinations.
    deployTo = ['/home/fbudassi/Downloads']
}

// Dependencies.
dependencies {
    compile "com.fasterxml.jackson.core:jackson-core:$jacksonVersion"
    compile "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
    compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
    compile "org.slf4j:slf4j-api:1.7.12"
    compile "org.apache.commons:commons-lang3:3.4"

    testCompile 'junit:junit:4.12'
}

repositories {
    mavenCentral()
}

// Jar name and Manifest data.
jar {
    def buildDate = new Date().format("MMMMM dd yyyy")

    archiveName = jarName
    manifest {
    attributes 'Built-By': System.getProperty('user.name'),
        'Built-Date': buildDate,
        'Built-JDK': System.getProperty('java.version'),        
        'Implementation-Title': projectName,
        'Implementation-Version': "$project.version - $buildDate - build: $buildNumber",
        'Implementation-Vendor': vendor
    }
}

// Deploy task: copy jar to destinations.
task deploy(dependsOn: 'build') {
    deployTo.each { dest ->
        copy {
            from jar
            into dest
        }
    }
}

// Gradle Wrapper version.
task wrapper(type: Wrapper) {
    gradleVersion = '2.5'
}

您能帮我找到问题的答案吗?

最佳答案

您必须在执行阶段执行复制操作。最快的修复方法可能是将任务操作放入doLast块中:

// Deploy task: copy jar to destinations.
task deploy(dependsOn: 'build') {
    doLast {
        deployTo.each { dest ->
            copy {
                from jar
                into dest
            }
        }
    }
}

否则,您的复制操作将已经在配置阶段执行(在创建新的jar之前),这就是为什么要复制旧的jar的原因。通常,将设置切换为使用复制类型的多个任务来进行部署是一个好主意。这还使您可以从进行纯复制操作时不使用的最新检查中受益。

关于file - 自定义Gradle “Copy”任务将复制过时的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710687/

相关文章:

android - 使用同级目录中的 gradle 构建库

gradle - 等价于 gradle 中测试依赖的 api

Excel VBA - 按标题搜索列并粘贴到新工作表中

c++ - 可以在基类中定义复制构造函数并仍然处理派生类情况吗?

java - 复制包含数组列表的数组列表

java - 在android中创建一个管理文件的类的建议

file - 获取文件扩展名的脚本

c# - 服务器因 ASP.NET-Page (C#) 而崩溃

Linux:删除不包含所有指定单词的文件

android - 如何在带有 JAR 导出的 Gradle 脚本中包含 "implementation"依赖项?