将构建工件复制到Gradle多项目构建中的源集

问题描述 投票:2回答:2

我有一个根gradle项目,包括两个子项目:

  1. 由webpack捆绑的JS前端名为qazxsw poi
  2. Java Spring后端称为admin-frontend

admin-backend中的构建任务运行webpack,它将包发送到admin-frontendadmin-frontend/build/resources/static中的相应命令编译Java应用程序。

我需要gradle:

  1. 建立admin-backend
  2. admin-frontend复制到admin-frontend/build/resources/static
  3. 构建admin-backend/src/main/resources/static,以便构建包含在第二步复制的webpack包

我该怎么做?

这是目录结构:

admin-backend
gradle
2个回答
1
投票

这是个有趣的问题。请不要将这个答案视为权威的,或者甚至是能够/可以工作的东西,但这可能是您想要尝试的。

首先将静态资源声明为. ├── 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 项目的输出 - 或artifact。您应该可以使用以下内容执行此操作:

admin-frontend

老实说,我猜测上面的语法。此外,您最好将configurations { staticFiles } artifacts { staticFiles file("$buildDir/resources/static"), { builtBy build } } 替换为实际生成静态文件的任务或任务列表。请参阅file(...) API文档中的示例。

现在,您需要做的就是将该配置添加为后端项目中的依赖项。就像是:

ArtifactHandler

然后,您应该能够使用configurations { frontEndResources } dependencies { frontEndResources project(path: ":path:to:admin-frontend", configuration: "staticResources") } 来合并您认为合适的静态资源。例如,如果您想将它们包含在项目的JAR中:

configurations.frontEndResources

理想情况下,您可以将其配置为主要源集资源的一部分,但这似乎只能用于目录,而不是文件集合。我认为这有一种愚蠢的方式:

  1. 创建一个将静态资源复制到$ buildDir下的某个自定义目录的任务
  2. 将该目录配置为主源集的输出(jar.from configurations.frontEndResources ) - 确保指定将输出声明为see second example in SourceSetOutput API doc从步骤1开始的任务
  3. 坐下来看看Gradle将自动运行生成静态资源的builtBy中的任务,将这些资源复制到admin-frontend,并将它们打包到生成的应用程序中。换句话说,你应该在admin-backendadmin-frontend之间顺利地进行增量构建。

现在剩下要做的就是看看它是否真的有效:)


0
投票

我最终在根admin-backend中执行了以下任务:

build.gradle

首先它运行webpack,将其构建复制到静态资源中,构建java。

© www.soinside.com 2019 - 2024. All rights reserved.