我需要构建一个 war
文件,其中包含来自不同存储库的 Spring Boot 后端和 Angular 前端。
这个想法是 Azure DevOps 在管道中构建 Angular 应用,Spring Boot 管道提取 Angular 工件以包含在 /static
资源目录下。
我目前正在本地试验以创建正确的 Gradle 代码。
我有一个 my-app
的副本,它是 Angular 在 dist
之后在 ng build
下创建的目录,我会将它粘贴到后端的存储库根目录下,与 { 相同级别{1}}
我需要告诉 Gradle,如果目录存在,它的内容必须映射到资源下的 build.gradle
目录
static
这会直接复制 war 文件的 def frontEndDirectory = file('my-app')
if (frontEndDirectory.isDirectory()) {
project.sourceSets {
main {
resources {
srcDir frontEndDirectory
}
}
}
}
下的资源,但它们应该在 WEB-INF/classes
下
我想问如何轻松地告诉 Gradle 从某个目录中选取文件并将它们放入资源的 WEB-INF/classes/static
子目录中。
今天,我将 Angular 应用程序作为目录获取,但我很有可能需要从 DevOps 中的 zip 文件中获取它。这将是我的下一步。
创建 CopyTask 脚本
/static
这具有将文件复制到暂存目录 (if (frontEndDirectory.isDirectory()) {
task copyGeneratedFiles(type: Copy) {
from frontEndDirectory
into 'build/resources/main/static'
}
tasks.war.dependsOn(copyGeneratedFiles)
}
) 中正确位置的期望结果,但这些文件没有出现在最终的 war 文件中
答案 0 :(得分:1)
根据@atomfrede 评论,以下操作有效
if (frontEndDirectory.isDirectory()) {
task copyGeneratedFiles(type: Copy) {
from frontEndDirectory
into 'build/resources/main/static'
}
tasks.processResources.dependsOn(copyGeneratedFiles)
}
自定义任务必须在 processResources
任务之前运行