清洁解决方案,用于从多个gradle子项目构建一个WAR存档

时间:2018-04-09 19:10:49

标签: java spring-boot gradle war

使用Gradle,可以从Java项目构建.war存档。我一直在使用如下项目设置将一些JavaScript SPA(Angular,vue.js ...)前端和一个Spring Boot后端一起打包成一个.war文件:

目录结构

/
  build.gradle
  settings.gradle
  /server
     /build/libs/server.war 
     /src ...
     build.gradle
  /client
     /dist/**                     <== This is where e.g. webpack puts the SPA build
     build.gradle
     /src ...

最顶级的settings.gradle

include 'client', 'server'

'server'build.gradle

plugins {
  id 'java'
  id 'idea'
  id 'org.springframework.boot' version '2.0.1.RELEASE'
  id 'io.spring.dependency-management' version '1.0.5.RELEASE'
  id 'war'
}

repositories {
  mavenCentral()
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

dependencies {
 compileOnly('org.projectlombok:lombok:1.16.16')
 annotationProcessor('org.projectlombok:lombok:1.16.16')
 compile('org.springframework.boot:spring-boot-starter-actuator')
 compile('org.springframework.boot:spring-boot-starter-web')
 runtime('org.springframework.boot:spring-boot-devtools')
 testCompile('org.springframework.boot:spring-boot-starter-test')
}

war.dependsOn(':client:build')
war {
  from '../client/dist/'
}

'client'build.gradle

plugins {
  id 'com.nickcharles.yarn-run' version '1.0.1'
}

这很好用。但我无法想象这对于这类任务来说是最干净的解决方案。

我的解决方案的退款是:

  • 构建的最终结果存储在build/libs子项目的:server中,而不是存储在语义上的根项目中

  • 必须以静态方式引用构建的客户端。

干净的解决方案/最顶层的build.gradle文件的内容如何显示,以避免这些后退?

0 个答案:

没有答案