如果将静态内容部署为jar,则Spring引导404错误

时间:2017-06-16 13:43:11

标签: spring angular spring-boot

我将spring boot应用程序和angular js项目作为两个不同的模块。

角度js内容('dist'文件夹内的文件)被转换为jar文件,并作为Spring启动应用程序的一部分包含在内。 jar中的文件夹结构是/ static / **。

jar出现在spring boot应用程序的lib文件夹中。

现在,当我尝试访问应用程序http://localhost:8080时,我收到404错误。

它工作正常,如果我复制/ resources / static中的“dist”文件夹内容并创建spring boot jar文件。

当静态内容作为jar文件包含时,我错过了什么。 ?

提前致谢

2 个答案:

答案 0 :(得分:0)

我有类似的设置,但使用Angular 4.我的Spring Boot版本是1.5.3.RELEASE。

我的构建基于Maven,有两个模块。一个用于前端(JAR),一个用于后端(WAR),它引用具有Maven依赖机制的第一个模块。

提供静态内容即可开箱即用。由于我使用的是Spring Security,因此我必须为此资源配置访问规则。但是这个问题应该用401而不是404来回答。

你的角度JAR结构似乎是正确的。你的前端构建完成了吗?

带有前端JAR的lib文件夹位于路径/WEB-INF/的Spring Boot WAR中。

您是否检查过使用的Spring Boot版本是否存在错误?

答案 1 :(得分:0)

@Moshe Arad @Raj根据https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot的理解, 静态内容可以位于上述位置之一。但是,我本人在提供静态内容方面面临着困难。我正在开发基于spring-boot和angular-cli(6.1.5)的应用程序。为了进行部署,使UI在spring-boot端口上工作;我跑了ng build。它在src / main / resource / static中生成文件(将angular.json中的outputPath更改为resources / static并在resources中创建一个空的dir static)。但是spring-boot在8080并没有提供任何角度内容。尽管index.html具有<base href="/">,但我认为对于从静态目录中选择/提供.js内容更具体,所以我运行了: ng build --base-href / --deploy-url /static/。这次生成的index.html在中具有/static/runtime.js等。但是当访问localhost:8080 /时(右键单击-> inspect显示200个响应代码)仍然不显示任何UI内容。但是点击localhost:8080 / static / runtime.js将显示404。

我相信,除了将内容添加到资源/静态文件之外,还有很多事情要做,因为tomcat可能正在尝试为其提供服务,但是以某种方式却无法显示该内容。因为我确实注意到浏览器选项卡上的favicon图标(角度图标),并且jar文件的内容在路径(BOOT-INF / classes / static / index.html等)中显示了生成的静态文件