我有2个子项目的Java项目。具有这样的结构
- project_root
|- client
|- src
|- build.gradle
|- server
|- src
|- build.gradle
|- build.gradle
我需要做的是在根buiild.gradle中创建“部署”任务,并执行以下操作:
这就是我尝试这样做的方式
root build.gradle:
allprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
task cleanTarget(type: Delete) {
delete "target"
delete "target.zip"
}
task cleanAll() {
dependsOn cleanTarget
dependsOn clean
dependsOn subprojects.clean
}
task jarChilds() {
dependsOn subprojects.jar
}
task copyFiles(type: Copy) {
copy {
from("client/build/libs/")
into project.file('target')
}
copy {
from("server/build/libs/")
into project.file('target')
}
}
task zipApp(type: Zip) {
from 'target/'
include '*'
include '*/*'
archiveName 'target.zip'
destinationDir(project.rootDir)
}
task deploy{
dependsOn cleanAll
dependsOn jarChilds
dependsOn copyFiles
dependsOn zipApp
jarChilds.shouldRunAfter cleanAll
copyFiles.shouldRunAfter jarChilds
zipApp.shouldRunAfter copyFiles
}
如果我手动运行它,则每个任务都能正常运行,但是如果运行“ deploy”文件夹,则不会创建“ target”文件夹。这是日志输出:
Executing task 'deploy'...
> Task :clean
> Task :cleanTarget
> Task :client:clean
> Task :server:clean
> Task :cleanAll
> Task :client:compileKotlin
> Task :client:compileJava
> Task :client:processResources
> Task :client:classes
> Task :client:inspectClassesForKotlinIC
> Task :client:jar
Client jar done
> Task :server:compileKotlin
> Task :server:compileJava
> Task :server:processResources
> Task :server:classes
> Task :server:inspectClassesForKotlinIC
> Task :server:jar
Server jar done
> Task :jarChilds
> Task :copyFiles NO-SOURCE
> Task :zipApp NO-SOURCE
> Task :deploy
BUILD SUCCESSFUL in 3s
14 actionable tasks: 14 executed
12:39:15: Task execution finished 'deploy'.
我看到错误“ NO-SOURCE”,但是文件夹“ client / build / libs”和“ server / build / libs”存在并且包含jar。我可以肯定,因为手动运行的任务“ copyFiles”会创建文件夹“ target”并复制所有文件。 我看到的唯一可能的选项是在“ jarChilds”之前运行“ copyFiles”任务。但是我不明白为什么。我缺少什么,为什么它不起作用?
P / S /对不起,我的英语不好
答案 0 :(得分:3)
您的任务copyFiles
使用copy
实例的方法Project
而不是配置实际任务。这就是为什么该任务保持未配置状态,并且一旦执行该任务就报告没有要处理的文件(NO-SOURCE
)的原因。要配置任务,请使用任务类型为Copy
的方法:
task copyFiles(type: Copy) {
from("client/build/libs/")
from("server/build/libs/")
into("target")
}
其他提示:您可能根本不需要任务copyFiles
。相反,您可以只使用任务zipApp
来收集文件:
task zipApp(type: Zip) {
from subprojects.jar
archiveName 'target.zip'
destinationDir(project.rootDir)
}
通过将jar
的{{1}}个任务放入subprojects
方法中,Gradle甚至会自动添加任务依赖项,因此您无需使用{{1 }}。
查看以下简短且完整的from
文件:
dependsOn