我是一个gradle初学者,我正在努力在后端jar中包含前端分发构建文件夹(我使用Spring Boot,而前端是一个离子应用程序)。在backend.gradle中,我将应该包含frontend-build文件夹(称为www)的jar-Task配置到后端的build文件夹中。 jar任务会运行,但后端构建文件夹中不存在所需的工件,因此不会出现在最终的jar中。很高兴得到任何帮助。
项目结构:
project
build.gradle
settings.gradle
backend
--> backend.gradle
frontend
--> frontend.gradle
settings.gradle
include 'backend'
include 'frontend'
rootProject.children.each {
it.buildFileName = it.name + '.gradle'
}
的build.gradle
allprojects {
buildscript {
repositories {
mavenCentral()
}
}
apply plugin: 'idea'
repositories {
mavenCentral()
}
}
frontend.gradle
plugins {
id "com.moowork.node" version "1.2.0"
}
task clean(dependsOn: 'npm_run_clean') {
}
task build(dependsOn: 'npm_run_build') {
}
backend.gradle
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
group = 'ch.renewinkler'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
jar {
from('frontend/www') {
into('public')
}
}
processResources.dependsOn(':frontend:build')
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
答案 0 :(得分:2)
你需要告诉gradle jar任务依赖于前端的构建任务,否则它可以在构建任务之前运行jar文件,因此无需包含在jar中。
使用名称引用项目也是一个更好的主意,而不是使用绝对路径:
jar {
dependsOn(':frontend:build')
into('public') {
from "${project(':frontend').projectDir}/www"
}
}