我有两个子项目的java项目。像这样的结构
- project_root
|- client
|- src
|- build.gradle
|- server
|- src
|- build.gradle
|- build.gradle我只需要在根buiild.gradle中创建“部署”任务,接下来的操作如下:
清除所有subprojects
我就是这么做的
根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
}如果手动运行,每个任务都会正常运行,但如果我运行‘部署’文件夹‘目标’没有创建。下面是日志输出:
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'.我看到错误“无源”,但文件夹'client/build/libs‘和'server/build/libs’存在并包含jars。我可以肯定,因为手动运行的任务'copyFiles‘创建文件夹’目标‘和复制所有文件。我看到的唯一可能的选项是在“jarChilds”之前运行“copyFiles”任务。但我不明白为什么。我错过了什么,为什么不起作用?
对不起,我的英语很差
发布于 2020-06-24 13:39:23
任务copyFiles使用Project实例的copy方法,而不是配置实际任务。这就是为什么任务保持未配置的原因,并且一旦执行,就会报告没有要处理的文件(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)
}通过将subprojects的subprojects任务放入from方法,Gradle甚至会自动添加任务依赖项,因此不需要使用dependsOn注册它们。
请查看以下简短完整的build.gradle文件:
subprojects { // using subprojects here, because your root project has no sources
apply plugin: 'java'
repositories {
mavenCentral()
}
}
task clean(type: Delete) { // without the 'java' plugin, there is no automatic 'clean' task
dependsOn subprojects.clean
delete 'target.zip'
}
task zipApp(type: Zip) {
mustRunAfter clean
from subprojects.jar
archiveName 'target.zip'
destinationDir(project.rootDir)
}
task deploy {
dependsOn clean
dependsOn zipApp
}https://stackoverflow.com/questions/62552426
复制相似问题