使用Gradle编译前端的项目

使用Gradle编译前端的项目

  • 前言
    • 项目结构
    • [根项目(parent-project)的 settings.gradle.kts](#根项目(parent-project)的 settings.gradle.kts)
    • [后端项目(backend)的 build.gradle.kts](#后端项目(backend)的 build.gradle.kts)
    • [前端项目(frontend)的 build.gradle.kts](#前端项目(frontend)的 build.gradle.kts)
    • 打包bootJar

前言

最近的项目都是使用Gradle来开发和编译的。 由于个人项目前后端都有用到,我想放在一个项目中,于是有了这篇文章。

我前端使用的Vue,后端使用kotlin , 框架使用的SpringBoot。

项目结构

项目分两个子项目, 前端和后端。 项目结构大概如下:

复制代码
parent-project
├── backend (Spring Boot 后端项目根目录)
│   ├── build.gradle.kts
│   ├── src
│   │   └── main
│   │       ├── java (Java 源代码目录)
│   │       └── resources (资源文件目录,包含配置文件等)
│   └── settings.gradle.kts
└── frontend (前端项目根目录,这里假设是 Vue 项目)
    ├── build.gradle.kts
    └── src
        ├── assets
        ├── components
        └── main.js

根项目(parent-project)的 settings.gradle.kts

这个文件用于声明多项目构建中的子项目,内容如下:

kotlin 复制代码
rootProject.name = "parent-project"
include("backend", "frontend")

上述代码定义了根项目的名称为 parent-project,并将 backend 和 frontend 作为子项目包含进来。

后端项目(backend)的 build.gradle.kts

正常的进行kts的脚本配置,但是需要新增配置两个Task, 来处理前端的逻辑,

kotlin 复制代码
val copyVueDist by tasks.registering(Copy::class) {
    dependsOn(":web:buildVue") // 同时依赖Vue模块的buildVue任务,确保先打包Vue
    from("../web/dist")        // 源目录,即Vue项目打包后的dist目录,注意相对路径
    into("build/resources/main/static")     //bootJar包的静态资源目录,会把前端的打包内容复制过来
}

tasks.getByName("processResources") {    //bootJar打包过程中处理静态资源的task,  
    dependsOn(copyVueDist)              //需要依赖上面的复制task
}

前端项目(frontend)的 build.gradle.kts

前端项目的kts配置

kotlin 复制代码
import com.github.gradle.node.npm.task.NpmTask

group = "com.github.blanexie.magic.web"
version = "0.0.1"

plugins {
    id("com.github.node-gradle.node") version "7.0.2"    //使用这个插件可以进行npm的调用
}

val buildTask = tasks.register<NpmTask>("buildVue") {  //定义一个buildVue的任务,用来打包前端项目
    args.set(listOf("run", "build-only" ))          //前端的打包命令
    dependsOn(tasks.npmInstall)                     //需要先执行依赖安装命令
}

打包bootJar

只要执行backend项目的build 或者bootJar任务即可, 他会按照顺序先执行前端的编译打包命令, 然后复制到最终的jar包中。

相关推荐
pas13610 分钟前
30-mini-vue 更新 element 的 props
前端·javascript·vue.js
魁首32 分钟前
OpenAI Codex 深入剖析:下一代 AI 编程助手的架构与原理
前端·openai·ai编程
火星数据-Tina40 分钟前
如何构建一个支持多终端同步的体育比分网站?
大数据·前端·数据库·websocket
IT_陈寒43 分钟前
React 19 实战:5个新特性让你的开发效率提升50%!
前端·人工智能·后端
GuMoYu43 分钟前
el-date-picker限制选择范围
前端·javascript·vue.js
冴羽1 小时前
JavaScript Date 语法要过时了!以后用这个替代!
前端·javascript·node.js
加油乐1 小时前
react使用Ant Design
前端·react.js·ant design
OEC小胖胖1 小时前
05|从 `SuspenseException` 到 `retryTimedOutBoundary`:Suspense 的 Ping 与 Retry 机制
前端·前端框架·react·开源库