Gradle子项目排序并生成jar(spring boot + angular)

我是一个Gradle newby。 我有以下项目设置:

  • 核心:包含spring boot 2应用程序
  • ui:角度5前端应用程序

目标:我想从我的根文件夹运行“gradle build”,它应该包含一个包含Angular应用程序的jar文件。

我得到了覆盖的“用户界面”:

apply plugin: "com.moowork.node" buildscript { repositories globalRepositories dependencies { classpath "com.moowork.gradle:gradle-node-plugin:1.2.0" } } node { // based on current version of Angular 5 version = "8.9.1" npmVersion = "5.6.0" download = true } task buildAngular(type: NpmTask) { args = ['run', 'build'] } buildAngular.dependsOn(npm_install) build.dependsOn(buildAngular) 

上述Gradle定义将在静态后端核心应用程序中构建并生成Angular文件。

‘核心’gradle构建文件看起来像这样(我排除了依赖关系),没有什么特别的:

 apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'xxx.xxxxxx' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 targetCompatibility = 1.8 buildscript { repositories globalRepositories ext { springBootVersion = '2.0.0.M7' } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } jar { baseName = 'spring-boot-angular' version = '1.0.0' } 

我怎样才能做到这一点? 我想从我的根项目运行“gradle build”时触发以下操作:

  1. 在ui中运行第一个“gradle build”
  2. 然后在核心中运行“gradle build”
  3. 使用’core’生成的jar文件作为最终结果

我受不了Groovy的语法,不能等待Gradle Kotlin DSL成熟:P

希望有人能帮助。 当我把这个设置(和Spring 5,Hibernate 5和flyway一起)的时候我会开源的。 提前致谢。

您需要在后端(core)内部生成的jar中包含前端(ui)buildAngular任务的结果:

 bootJar { dependsOn ':ui:buildAngular' into('BOOT-INF/classes/static') { from "${project(':ui').projectDir}/dist" } } 

bootJar任务现在取决于前端的buildAngular任务,这将使gradle根据需要进行排序。

您可以浏览我的这个项目,使用基本相同的设置(除了使用纱线代替npm来解决依赖关系)

JB Nizet的答案应该工作。 您也可以在根gradle文件中添加以下内容:

 build.dependsOn("core:build").mustRunAfter("ui:build") 

以上回答在我看来是更清洁的。