在一个jar中构建带有springboot2.x的angular11

yvgpqqbh  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(343)

我面临着一个问题,建立一个Angular 11与Spring Boot罐。如果我单独运行应用程序(8080上的后端和4200上的用户界面),它们工作得很好,中间的连接和调用正常稳定。
我要做的是整合这个。我见过很多例子,但我不知道我在哪里做错了什么。
以下是项目结构图:

下面是maven插件,它们正在安装ui构建内容并将其复制到jar中。

  1. <plugin>
  2. <groupId>com.github.eirslett</groupId>
  3. <artifactId>frontend-maven-plugin</artifactId>
  4. <version>${frontend-maven-plugin.version}</version>
  5. <configuration>
  6. <nodeVersion>${node.version}</nodeVersion>
  7. <workingDirectory>${frontendSrcDir}</workingDirectory>
  8. <installDirectory>${project.build.directory}</installDirectory>
  9. <environmentVariables>
  10. <CI>true</CI>
  11. </environmentVariables>
  12. <!--suppress UnresolvedMavenProperty -->
  13. <skip>${skip.ui}</skip>
  14. </configuration>
  15. <executions>
  16. <execution>
  17. <id>install-frontend-tools</id>
  18. <goals>
  19. <goal>install-node-and-npm</goal>
  20. </goals>
  21. <configuration>
  22. <nodeVersion>v14.16.0</nodeVersion>
  23. <npmVersion>6.14.13</npmVersion>
  24. </configuration>
  25. </execution>
  26. <execution>
  27. <id>npm-install</id>
  28. <goals>
  29. <goal>npm</goal>
  30. </goals>
  31. <configuration>
  32. <arguments>install</arguments>
  33. </configuration>
  34. </execution>
  35. <execution>
  36. <id>build-frontend</id>
  37. <goals>
  38. <goal>npm</goal>
  39. </goals>
  40. <phase>prepare-package</phase>
  41. <configuration>
  42. <arguments>run build --prod</arguments>
  43. </configuration>
  44. </execution>
  45. </executions>
  46. </plugin>
  47. <plugin>
  48. <groupId>org.apache.maven.plugins</groupId>
  49. <artifactId>maven-resources-plugin</artifactId>
  50. <executions>
  51. <execution>
  52. <id>angular-build</id>
  53. <goals>
  54. <goal>copy-resources</goal>
  55. </goals>
  56. <phase>validate</phase>
  57. <configuration>
  58. <outputDirectory>${project.build.outputDirectory}/static</outputDirectory>
  59. <resources>
  60. <resource>
  61. <directory>${frontendSrcDir}/dist/ui</directory>
  62. </resource>
  63. </resources>
  64. </configuration>
  65. </execution>
  66. </executions>
  67. </plugin>

在jar中,构建文件被复制到jar/boot-inf/classes/static下。这是图像

我错过了什么?

7lrncoxx

7lrncoxx1#

如果您在“资源”中有一个名为“static”或“public”的文件夹,springboot会自动提供静态内容。所以把所有从angular编译的文件放在参考资料下一个名为“static”的文件夹中。
这样做将使Spring Boot服务Angular :)

iibxawm4

iibxawm42#

在@aborgh答案中,
所以把所有从angular编译的文件放在参考资料下一个名为“static”的文件夹中。
这是正确的,我只是补充一些。具体来说,当您运行build命令时,例如 npm build ,它在中生成静态文件,如.html、.js、.css dist 文件夹。
所以你想复制下的所有文件 dist 将它们粘贴到springboot项目中,然后将它们直接放到 resources/static 文件夹。
与您的问题无关,但我建议您将静态文件与springboot后端应用程序分开放置。尝试使用反向代理,比如nginx,这样就可以解析请求,比如https://example.com/api/ 到您的springboot后端应用程序和所有其他请求,例如https://example.com/foo/ 你的前端Angular 视图。

相关问题