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

G.M*_*ast 2 gradle build.gradle spring-boot gradle-plugin

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

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

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

我得到了'ui':

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)
Run Code Online (Sandbox Code Playgroud)

上面的 gradle 定义将在静态后端核心应用程序中构建和生成 Angular 文件。

'core' 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'
}
Run Code Online (Sandbox Code Playgroud)

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

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

我受不了像语法一样的 groovy,等不及 Gradle Kotlin DSL 成熟 :P

希望有人能帮忙。当我准备好这个设置时,我会开源这个设置(连同 Spring 5、Hibernate 5 和 flyway)。提前致谢。

JB *_*zet 5

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

bootJar {
  dependsOn ':ui:buildAngular'

  into('BOOT-INF/classes/static') {
    from "${project(':ui').projectDir}/dist"
  }
}
Run Code Online (Sandbox Code Playgroud)

bootJar 任务现在依赖于前端的 buildAngular 任务这一事实将使 gradle 根据需要对它们进行排序。

您可以浏览我的这个项目以获取使用基本相同设置的示例(除了它使用 yarn 而不是 npm 来解决依赖关系)