我有一个由两个子项目组成的root gradle项目:
admin-frontend
admin-backend
的Java Spring后端 admin-frontend
中的构建任务运行webpack,该软件包将捆绑发送到admin-frontend/build/resources/static
中。 admin-backend
中的相应命令将编译Java应用程序。
我需要gradle来
admin-frontend
admin-frontend/build/resources/static
复制到admin-backend/src/main/resources/static
admin-backend
,以便构建将包括在第二步中复制的webpack捆绑包我该怎么做?
这是目录结构:
.
├── admin-backend
│ ├── build
│ ├── build.gradle
│ ├── src
│ ├── main
│ ├── resources
│ ├── static
├── admin-frontend
│ ├── build
│ │ ├── resources
│ │ ├── static
│ ├── build.gradle
├── build.gradle
├── gradle
│ └── wrapper
├── gradlew
├── gradlew.bat
└── settings.gradle
答案 0 :(得分:1)
这是一个有趣的问题。请不要以这个答案为权威,甚至不要以为会/可以的,但您可能想尝试一下。
首先将静态资源声明为admin-frontend
项目的输出或artifact。您应该可以使用以下内容来做到这一点:
configurations {
staticFiles
}
artifacts {
staticFiles file("$buildDir/resources/static"), {
builtBy build
}
}
说实话,我在猜测上面的语法。同样,理想情况下,您将file(...)
替换为实际生成静态文件的任务或任务列表。请参阅ArtifactHandler
API文档中的示例。
现在您需要做的就是将该配置添加为后端项目中的依赖项。像这样:
configurations {
frontEndResources
}
dependencies {
frontEndResources project(path: ":path:to:admin-frontend", configuration: "staticResources")
}
然后,您应该可以使用configurations.frontEndResources
合并静态资源,但是您认为合适。例如,如果您想将它们包含在项目的JAR中:
jar.from configurations.frontEndResources
理想情况下,您可以将其配置为 main 源集资源的一部分,但这似乎只能通过目录而不是文件集合来实现。我认为这是一种骇人听闻的方法:
SourceSetOutput
API doc)的输出-确保您指定将输出声明为builtBy
,将步骤1中的任务admin-frontend
中的任务,这些任务会生成静态资源,将这些资源复制到admin-backend
,然后将其打包到生成的应用程序中。换句话说,您应该在admin-frontend
和admin-backend
之间顺利进行增量构建。现在剩下要做的就是看看它是否真的有效:)
答案 1 :(得分:0)
我最终在根build.gradle
中完成了以下任务:
task build(dependsOn: ':frontend:webpack') {
doLast {
def backendStaticResources = new File(project(':backend').projectDir ,"/src/main/resources/static");
def backendTemplates = new File(project(':backend').projectDir ,"/src/main/resources/templates");
[backendStaticResources,backendTemplates].each {
delete(fileTree(it) {
exclude '.gitignore'
})
}
copy {
from file('frontend/build/index.html')
into 'backend/src/main/resources/templates'
}
copy {
from 'frontend/build'
into 'backend/src/main/resources/static'
}
}
}
因此,首先运行webpack,将其内部版本复制到静态资源中,然后构建Java。