在 Gradle 中重新映射 Java 资源的路径

时间:2021-05-10 16:04:22

标签: angular spring-boot gradle

我需要构建一个 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 文件中

1 个答案:

答案 0 :(得分:1)

根据@atomfrede 评论,以下操作有效

if (frontEndDirectory.isDirectory()) {
    task copyGeneratedFiles(type: Copy) {
        from frontEndDirectory
        into 'build/resources/main/static'
    }
    tasks.processResources.dependsOn(copyGeneratedFiles)
}

自定义任务必须在 processResources 任务之前运行