gradle - 将构建工件复制到 Gradle 多项目构建中的源集
问题描述
我有一个由两个子项目组成的根 gradle 项目:
- 由 wepback 捆绑的 JS 前端称为
admin-frontend
- Java Spring后端调用
admin-backend
中的构建任务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
解决方案
这是个有趣的问题。请不要将此答案视为权威,甚至不要将其视为将/可以起作用的东西,但这是您可能想尝试的东西。
首先将静态资源声明为项目的输出(或工件)admin-frontend
。您应该可以通过以下方式做到这一点:
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
理想情况下,您可以将其配置为主要源集资源的一部分,但这似乎只适用于目录,而不是文件集合。我认为有一个hacky方式:
- 创建一个任务,将静态资源复制到$buildDir下的某个自定义目录
- 将该目录配置为主要源集的输出(参见
SourceSetOutput
API 文档中的第二个示例)——确保指定输出被声明为builtBy
步骤 1 中的任务 - 坐下来看看 Gradle 将自动运行
admin-frontend
生成静态资源的任务,将这些资源复制到admin-backend
,并将它们打包到生成的应用程序中。换句话说,您应该让增量构建在admin-frontend
和之间顺利运行admin-backend
。
现在剩下要做的就是看看它是否真的有效:)
推荐阅读
- python - Pandas:如何仅删除列末尾的最后一个连字符
- google-forms - 如何根据其他用户过去的回复使 Google 表单自动填充?
- c - 我知道一个地址,但我应该如何判断在哪个部分?使用C的全局区域或堆区域或堆栈区域
- json - 如何解决“手势 RangeError(索引)捕获的异常:无效值:有效值范围为空:0”
- c++ - 什么会使多边形算法中的点仅在正向和反向运行时才能正常工作?
- php - PHP:如何使用键->值对每两个分隔符将一个字符串分解为一个数组
- kubernetes - 将 GKE 集群拆除为“全新”状态而不删除它?
- scala - Spark——自定义reduce函数保存到磁盘然后上传到s3
- javascript - XMLHttpRequest 返回事件对象而不是实际数据
- fortran - Fortran 将未知大小的文件读入数组