自定义 Gradle "Copy" 任务副本已过时 类
Custom Gradle "Copy" task copies outdated classes
我目前正在将 Ant 脚本迁移到其对应的 Gradle 版本。
除自定义复制任务外一切正常,该任务负责将生成的 jar 文件从 build/libs 复制到另一个目录(项目外)。
如果在第一次构建后,我在任何 java 文件中引入了更改,并尝试执行
gradle clean build deploy
我看到 build/classes *.class 文件已正确更新,build/libs/template-util.jar 也已正确更新。但是,复制到 /home/fbudassi/Downloads 的文件模板-util.jar 具有(大部分时间)class 的旧版本。有时,经过一些更改(我真的不知道在哪里,因为我尝试了很多东西),复制的 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 的原因。通常,将您的设置切换为使用复制类型的多个任务来进行部署是个好主意。这还允许您从进行普通复制操作时不使用的最新检查中受益。
除了 jar 在配置阶段部署的事实(如 Rene 所写),您可以使用 Copy
- DSL, Gradle Docs 类型的任务并从输出和最新机制中受益:
task deploy(dependsOn: 'build', type: Copy) {
outputs.file(new File(dest)
from jar.outputs
into dest
}
我目前正在将 Ant 脚本迁移到其对应的 Gradle 版本。 除自定义复制任务外一切正常,该任务负责将生成的 jar 文件从 build/libs 复制到另一个目录(项目外)。
如果在第一次构建后,我在任何 java 文件中引入了更改,并尝试执行
gradle clean build deploy
我看到 build/classes *.class 文件已正确更新,build/libs/template-util.jar 也已正确更新。但是,复制到 /home/fbudassi/Downloads 的文件模板-util.jar 具有(大部分时间)class 的旧版本。有时,经过一些更改(我真的不知道在哪里,因为我尝试了很多东西),复制的 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 的原因。通常,将您的设置切换为使用复制类型的多个任务来进行部署是个好主意。这还允许您从进行普通复制操作时不使用的最新检查中受益。
除了 jar 在配置阶段部署的事实(如 Rene 所写),您可以使用 Copy
- DSL, Gradle Docs 类型的任务并从输出和最新机制中受益:
task deploy(dependsOn: 'build', type: Copy) {
outputs.file(new File(dest)
from jar.outputs
into dest
}