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

Spring boot Gradle子项目排序和生成jar(spring boot+angular),spring-boot,gradle,build.gradle,gradle-plugin,Spring Boot,Gradle,Build.gradle,Gradle Plugin,我是个新手。我有以下项目设置: 根 核心:包含SpringBoot2应用程序 ui:angular 5前端应用程序 目标:我想从我的根文件夹运行'GradleBuild',它应该包含一个jar文件,其中包括Angular应用程序 我得到了“用户界面”的覆盖: apply plugin: "com.moowork.node" buildscript { repositories globalRepositories dependencies {

我是个新手。我有以下项目设置:

核心:包含SpringBoot2应用程序 ui:angular 5前端应用程序 目标:我想从我的根文件夹运行'GradleBuild',它应该包含一个jar文件,其中包括Angular应用程序

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

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定义将在静态后端核心应用程序中构建和生成角度文件

“核心”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”时触发以下操作:

在ui中运行第一个“渐变构建” 然后在core中再次运行“gradle build” 使用从“core”生成的jar文件作为最终结果 我无法忍受像groovy一样的语法,不能等待Gradle Kotlin DSL成熟:p


希望有人能帮忙。当我准备好后,我会将这个设置与Spring5、Hibernate5和flyway一起开源。提前感谢。

您需要在后端核心构建中生成的jar中包含前端ui构建任务的结果:

bootJar {
  dependsOn ':ui:buildAngular'

  into('BOOT-INF/classes/static') {
    from "${project(':ui').projectDir}/dist"
  }
}
bootJar任务现在依赖于前端的buildAngular任务这一事实将使gradle根据需要对它们进行排序


您可以浏览到一个使用基本相同设置的示例,只是它使用了纱线而不是npm来解决依赖关系

问题的答案应该是正确的。您还可以在根gradle文件中添加以下内容:

build.dependsOn("core:build").mustRunAfter("ui:build")
在我看来,上述答案更为清晰