【问题标题】:Remapping the path of Java resources in Gradle在 Gradle 中重新映射 Java 资源的路径
【发布时间】:2021-05-11 19:40:58
【问题描述】:

我需要构建一个 war 文件,其中包含来自不同存储库的 Spring Boot 后端和 Angular 前端。

这个想法是 Azure DevOps 在管道中构建 Angular 应用程序,Spring Boot 管道获取 Angular 工件以包含在 /static 资源目录下。

我目前正在本地试验以创建正确的 Gradle 代码。

我有一个my-app 的副本,这是Angular 在ng build 之后在dist 下创建的目录,我将把它粘贴到后端的存储库根目录下,与build.gradle 处于同一级别

我需要告诉 Gradle,如果目录存在,它的内容必须映射到资源下的static 目录

def frontEndDirectory = file('my-app')

if (frontEndDirectory.isDirectory()) {
    project.sourceSets {
        main {
            resources {
                srcDir frontEndDirectory
            }
        }
    }
}

这会将资源直接复制到war文件的WEB-INF/classes下,但它们应该在WEB-INF/classes/static

我想问如何轻松告诉Gradle从某个目录中选择文件并将它们放到资源的/static子目录中。

今天我将我的 Angular 应用程序作为一个目录,但我很可能需要从 DevOps 中的 zip 文件中获取它。这将是我的下一步。

我也试过

创建 CopyTask 脚本

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

这具有将文件复制到暂存目录 (build/resources/main/static) 中正确位置的期望结果,但文件未出现在最终的 war 文件中

【问题讨论】:

  • 你能尝试不同的任务依赖吗?我建议让processResources 依赖于copyGeneratedFiles(因为这些是资源)。您也可以尝试直接配置 processResources 任务(这是一个复制任务),例如``` processResources { from("my-webapp") { into("static") } }
  • 赢家是.... ????

标签: angular spring-boot gradle


【解决方案1】:

根据@atomfrede 的评论,以下是有效的

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2015-04-19
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多