使用Gradle在JAR中包含前端构建的分发文件夹

时间:2017-11-25 09:10:30

标签: java gradle

我是一个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')
}

1 个答案:

答案 0 :(得分:2)

你需要告诉gradle jar任务依赖于前端的构建任务,否则它可以在构建任务之前运行jar文件,因此无需包含在jar中。

使用名称引用项目也是一个更好的主意,而不是使用绝对路径:

jar {
    dependsOn(':frontend:build')

    into('public') {
        from "${project(':frontend').projectDir}/www"
    }
}