使用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文件的内容如何显示,以避免这些后退?