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

Posted

技术标签:

【中文标题】使用 Gradle 在 JAR 中包含前端构建的分发文件夹【英文标题】:Include distribution folder of frontend build in the JAR with Gradle 【发布时间】:2018-05-09 02:51:52 【问题描述】:

我是一名 gradle 初学者,我正在努力将前端分发构建文件夹包含在后端 jar 中(我使用 Spring Boot,前端是一个离子应用程序)。在 backend.gradle 中,我配置了应该包含 frontend-build 文件夹(称为 www)的 jar-Task 到后端的 build 文件夹中。 jar 任务运行完成,但所需的工件不存在于 backend-build 文件夹中,因此不存在于最终的 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()
        

前端.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】:

你需要告诉 gradle jar 任务依赖于前端的构建任务,否则它可能会在构建任务之前运行 jar 文件,因此 jar 中没有任何内容。

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

jar 
    dependsOn(':frontend:build')

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

【讨论】:

感谢您的帮助

以上是关于使用 Gradle 在 JAR 中包含前端构建的分发文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在开发期间使用 Gradle 在 Spring Boot 的 JAR 中包含 DevTools

如何使用具有依赖关系的gradle构建jar文件

如何在我的 gradle java 项目中包含外部 .jar? [复制]

如何在Android库AAR中包含第三方JAR,而无需合并代码

在 fat JAR 中包含源

如何在 maven jar 构建过程中包含外部 jar?