修改了前后端的代码,集成打包配置。

This commit is contained in:
localuser 2025-11-08 21:04:11 +08:00
parent 33e88eabd6
commit abf51a7c96
7 changed files with 189 additions and 5 deletions

70
.gitignore vendored
View File

@ -32,3 +32,73 @@ build/
### VS Code ### ### VS Code ###
.vscode/ .vscode/
src/main/resources/static/favicon.ico
src/main/resources/static/index.html
src/main/resources/static/assets/401-88639a9f.js
src/main/resources/static/assets/401-a61ddb94.gif
src/main/resources/static/assets/401-d244ab29.css
src/main/resources/static/assets/404_cloud-98e7ac66.png
src/main/resources/static/assets/404-7ca1fe28.css
src/main/resources/static/assets/404-7d365cf6.js
src/main/resources/static/assets/404-538aa4d7.png
src/main/resources/static/assets/BarChart-4fa92581.js
src/main/resources/static/assets/BarChart.vue_vue_type_script_setup_true_lang-2e88c556.js
src/main/resources/static/assets/editor-1fcae90e.js
src/main/resources/static/assets/editor-501cf061.css
src/main/resources/static/assets/FunnelChart-54cd9c1c.js
src/main/resources/static/assets/index-0c0fc4d5.js
src/main/resources/static/assets/index-0c6de5c4.css
src/main/resources/static/assets/index-0e353610.js
src/main/resources/static/assets/index-0fdbb0c3.css
src/main/resources/static/assets/index-2a2e686f.js
src/main/resources/static/assets/index-2d8a94de.js
src/main/resources/static/assets/index-3c8b576d.js
src/main/resources/static/assets/index-3e4e0c0c.css
src/main/resources/static/assets/index-3ea31a03.css
src/main/resources/static/assets/index-4a40522c.js
src/main/resources/static/assets/index-4af6c095.js
src/main/resources/static/assets/index-4b2c54eb.css
src/main/resources/static/assets/index-4e9a4a3c.css
src/main/resources/static/assets/index-4e36f11e.css
src/main/resources/static/assets/index-5b909b30.js
src/main/resources/static/assets/index-6cfbc6e9.js
src/main/resources/static/assets/index-6d369684.js
src/main/resources/static/assets/index-9cdf102e.js
src/main/resources/static/assets/index-013c92bf.css
src/main/resources/static/assets/index-45b24ee3.js
src/main/resources/static/assets/index-58b7edbc.css
src/main/resources/static/assets/index-97e2e5d7.js
src/main/resources/static/assets/index-336eb0cd.js
src/main/resources/static/assets/index-1124a30a.js
src/main/resources/static/assets/index-5736aae9.js
src/main/resources/static/assets/index-23665d45.js
src/main/resources/static/assets/index-35744cd0.css
src/main/resources/static/assets/index-49408471.js
src/main/resources/static/assets/index-a7bce641.css
src/main/resources/static/assets/index-adef366f.js
src/main/resources/static/assets/index-dd0c8cf0.css
src/main/resources/static/assets/index-dd267244.js
src/main/resources/static/assets/index-de40e6e9.css
src/main/resources/static/assets/index-f9a887b2.css
src/main/resources/static/assets/index1-f104bedb.js
src/main/resources/static/assets/index2-8960589f.js
src/main/resources/static/assets/indicator-5b15d0d1.png
src/main/resources/static/assets/lbcz_sc-0ed76926.js
src/main/resources/static/assets/lbcz_td-b5984317.js
src/main/resources/static/assets/lbcz_xg-aaaefba0.js
src/main/resources/static/assets/logo-03d6d6da.png
src/main/resources/static/assets/page.vue_vue_type_script_setup_true_lang-b61c9f0c.js
src/main/resources/static/assets/personalCenter-035ae2fa.js
src/main/resources/static/assets/personalCenter-ad68cb91.css
src/main/resources/static/assets/PieChart-24d7f015.js
src/main/resources/static/assets/PieChart.vue_vue_type_script_setup_true_lang-d4bdc783.js
src/main/resources/static/assets/RadarChart-f3f7d950.js
src/main/resources/static/assets/RadarChart.vue_vue_type_script_setup_true_lang-c1ab7800.js
src/main/resources/static/assets/resize-76420810.js
src/main/resources/static/assets/rsaEncrypt-96cab0ea.js
src/main/resources/static/assets/sortable.esm-be94e56d.js
src/main/resources/static/assets/tagsView-23de2998.js
src/main/resources/static/assets/top_tx-3cab94c6.png
src/main/resources/static/assets/u287-9a3328bc.gif
src/main/resources/static/assets/uploader-769f4f98.js
src/main/resources/static/assets/uploader-ccfd78f9.css

52
docs/前后端整合.md Normal file
View File

@ -0,0 +1,52 @@
# 前后端一体化构建与打包说明
本文档说明如何在 Maven 构建流程中先编译前端pnpm再编译后端Java并在 `package` 阶段将两者一起打包,使生成的可运行 `jar/war` 直接可以访问前端首页 `index.html`
## 前置要求
- 已安装 JDK推荐 17+)和 Maven3.6.3+)。
- 已安装 Node.js推荐 18+)与 pnpm全局`npm i -g pnpm`。
- 当前项目结构:
- 后端Spring Boot`app/pom.xml`,源码在 `app/src/main/java` 与资源在 `app/src/main/resources`
- 前端Vite/Vue位于 `app/frontend`,构建输出目录默认是 `app/frontend/dist`
## 构建流程概览
`pom.xml` 中集成了以下步骤:
1. `generate-resources` 阶段:进入 `frontend` 目录,执行 `pnpm install --frozen-lockfile``pnpm run build`
2. `process-resources` 阶段:将前端构建产物从 `frontend/dist` 复制到后端资源目录 `src/main/resources/static`
3. 随后执行后端 Java 编译与打包,最终产出可运行的 `jar/war`
这样在运行后端时Spring Boot 会从类路径的 `static` 目录自动提供 `index.html` 作为欢迎页入口(访问根路径 `/` 即可看到前端页面)。
## 关键 POM 配置(摘要)
已经在 `app/pom.xml``<build><plugins>` 中加入:
- `exec-maven-plugin`:在 Java 编译前执行 pnpm 安装与构建。
- `maven-resources-plugin`:复制前端构建产物到 `src/main/resources/static`
无需手动改动目录,只需按下述命令执行即可。
## 常用命令
- 开发运行(跳过测试):`mvn -DskipTests spring-boot:run`
- 如需指定开发配置:`mvn -DskipTests -Dspring-boot.run.profiles=dev spring-boot:run`
- 构建打包(跳过测试):`mvn -DskipTests package`
- 构建过程中会自动执行前端构建并拷贝到后端资源。
## 运行与访问
- 运行可执行包(以 `war` 为例,`artifactId=platform``version=1.0`
- 默认运行:`java -jar target/platform-1.0.war`
- 指定 dev 配置:`java -Dspring.profiles.active=dev -jar target/platform-1.0.war`
- 访问:
- 若启用 `dev` 配置并端口为 `8093``http://localhost:8093/`
- 若使用默认端口(例如 `18080``http://localhost:18080/`
> 说明Spring Boot 会自动将 `classpath:/static/index.html` 作为欢迎页,访问根路径即可进入前端入口页面。
## 注意事项
- 请确保 `pnpm` 可在构建机/开发机的环境变量中直接调用。
- 若前端构建输出目录(`dist`)有自定义,请同步更新 POM 中的复制路径。
- 如前端使用路由的 `history` 模式并期望后端兜底到 `index.html`,可按需添加后端控制器或使用前端服务器侧配置(当前方案以静态欢迎页为主)。
## 故障排查
- 构建失败(找不到 `pnpm`):确认已安装并可在命令行执行 `pnpm -v`
- 页面乱码:已在 POM 配置统一 JVM 编码为 `UTF-8`;在 Windows PowerShell 终端也应设置为 `UTF-8`
完成上述配置后,只需使用 Maven 的标准命令,即可实现前后端一体化构建和打包运行。

View File

@ -4,6 +4,7 @@
"scripts": { "scripts": {
"dev": "vite serve --mode development", "dev": "vite serve --mode development",
"build:prod": "vue-tsc --noEmit && vite build --mode production", "build:prod": "vue-tsc --noEmit && vite build --mode production",
"build:mvn": "vite build --mode production",
"serve": "vite preview", "serve": "vite preview",
"lint": "eslint src/**/*.{ts,js,vue} --fix", "lint": "eslint src/**/*.{ts,js,vue} --fix",
"prettier": "prettier --write ." "prettier": "prettier --write ."

View File

@ -1,7 +1,7 @@
@use 'src/styles/variables.module' as *; @import 'src/styles/variables.module';
@use 'src/styles/element-plus' as *; @import 'src/styles/element-plus';
@use './sidebar.scss' as *; @import './sidebar.scss';
@use './tailwind.scss' as *; @import './tailwind.scss';
html,body,#app{ html,body,#app{
height: 100%; height: 100%;

View File

@ -1,6 +1,6 @@
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
darkMode: 'class', darkMode: 'class',
theme: { theme: {

61
pom.xml
View File

@ -317,6 +317,67 @@
</resources> </resources>
<plugins> <plugins>
<!-- 在 Java 编译前构建前端,并将构建产物复制到后端资源目录 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>frontend-install</id>
<phase>generate-resources</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>npm</executable>
<workingDirectory>${project.basedir}/frontend</workingDirectory>
<arguments>
<argument>install</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>frontend-build</id>
<phase>generate-resources</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>npm</executable>
<workingDirectory>${project.basedir}/frontend</workingDirectory>
<arguments>
<argument>run</argument>
<argument>build:mvn</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>copy-frontend</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/src/main/resources/static</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/frontend/dist</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.asciidoctor</groupId> <groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId> <artifactId>asciidoctor-maven-plugin</artifactId>