我尝试构建jar,然后将其复制到另一个文件夹.
task createJar(type: Jar) {
archiveName = "GradleJarProject.jar"
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': 'me.test.Test'
}
baseName = project.name
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
task copyJarToBin {
copy {
from 'build/libs/GradleJarProject.jar'
into "d:/tmp"
}
}
task buildApp (dependsOn: [clean, createJar, copyJarToBin])
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚一个问题.copyJarToBin任务尝试复制旧jar.如果我在项目中删除/ build文件夹并运行buildApp()任务,任务createJar()将生成.jar文件,但copyJarToBin()将找不到.jar文件.
你可以帮帮我吗?
谢谢.
Ren*_*hke 53
罪魁祸首是你的copyJarToBin任务.什么时候做
task copyJarToBin {
copy {
from 'build/libs/GradleJarProject.jar'
into "d:/tmp"
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该copy方法在配置时间内复制jar .(请参阅https://docs.gradle.org/current/userguide/userguide_single.html#sec:build_phases上的gradle用户指南以了解构建生命周期)您希望在执行阶段运行实际的复制操作(执行任务).
解决这个问题的copy一种方法是将方法的调用移动到doLast块中:
task copyJarToBin {
doLast {
copy {
from 'build/libs/GradleJarProject.jar'
into "d:/tmp"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,即使文件没有更改,您也不会受益于gradles增量构建功能,并且每次执行任务时都会复制该文件.
编写copyJarToBin任务的更好,更具惯用性的方法是更改任务实现以使用Copy任务类型:
task copyJarToBin(type: Copy) {
from 'build/libs/GradleJarProject.jar'
into "d:/tmp"
}
Run Code Online (Sandbox Code Playgroud)
我们甚至可以通过利用gradle的自动装配功能来改进此片段.您可以将一个任务的输出声明为另一个任务的输入.因此,您可以简单地执行以下操作,而不是编写`build/libs/GradleJarProject.jar'.
task copyJarToBin(type: Copy) {
from createJar // shortcut for createJar.outputs.files
into "d:/tmp"
}
Run Code Online (Sandbox Code Playgroud)
现在您不需要打扰任务排序,因为gradle知道createJar必须在执行copyJarToBin任务之前执行任务.
Pet*_* T. 23
我认为上面的答案有些陈旧.这是使用gradle 3.3的答案
jar {
baseName = 'my-app-name'
version = '0.0.1'
}
task copyJar(type: Copy) {
from jar // here it automatically reads jar file produced from jar task
into 'destination-folder'
}
build.dependsOn copyJar
Run Code Online (Sandbox Code Playgroud)
小智 8
只是对上面的答案做了一些更正:
jar {
baseName = "$artifactId"
version = '0.0.1'
}
task copyJar(type: Copy) {
from jar // copies output of file produced from jar task
into 'destination-folder'
}
build.finalizedBy copyJar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40179 次 |
| 最近记录: |