如何将Spring Boot与Angular应用打包为单个war文件部署
问题1:构建报错解决方案
你遇到的报错由两个问题导致:
1. 子模块名称不匹配
你在settings.gradle里定义的子模块名称是:angularProject,但报错中显示主项目在查找:frontendProject,请统一两处的模块名称:
- 要么将主项目
build.gradle中的依赖改为implementation(project(':angularProject'))(注意你原有配置还少了一个右括号,记得补上) - 要么将
settings.gradle和依赖配置中的模块名统一改为:frontendProject
2. Java版本不兼容
Angular子模块当前的编译版本为Java 15,和主项目使用的Java 8不匹配,在Angular项目的build.gradle中添加如下配置统一版本即可:
java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 }
问题2:Angular静态资源自动同步解决方案
修复完上述报错后,你当前的配置其实已经可以让Spring Boot正常识别Angular静态资源:Angular子模块构建出的jar包中static目录下的产物会自动加入主项目的classpath,Spring Boot启动后可直接访问,不需要手动同步到主项目的resources/static目录。
如果你确实有需求将构建产物直接同步到主项目的resources/static目录,在主项目的build.gradle中添加如下配置即可:
// 新增复制Angular构建产物的任务 task copyAngularStatic(type: Copy) { // 依赖Angular子模块的构建任务,确保每次复制都是最新产物 dependsOn ':angularProject:npm_run_build' // 替换为你Angular项目构建后的实际产物路径 from '../angularProject/dist/projectName' // 目标路径为主项目的静态资源目录 into 'src/main/resources/static' } // 绑定到主项目的资源处理流程,构建时自动执行 processResources.dependsOn copyAngularStatic
内容的提问来源于stack exchange,提问作者Akki
相关产品推荐
相关产品推荐

