下午好
我是 Spring 和 Spring Boot 的新手,通常我使用 Eclipse IDE 和 JSF。 我在一个项目中工作,该项目在前端使用 Angular,在后端使用 Spring Boot。我有以下 Maven 结构
PARENT
FRONTEND
pom.xml
BACKEND
pom.xml
pom.xml
FrontEnd 生成一个 webjar,它使用 FrontEnd-Maven-PLugin 构建 Angular 应用程序,后端依赖于这个 webJar。 后端 pom.xml 具有以下配置:
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
我不想使用嵌入式 Tomcat 服务器。 在 Intellij 中,我将项目导入为 Maven 项目, 在运行/调试配置中,除了默认的 Spring Boot 配置之外,我还创建了一个具有指向 *.war 工件的“Path to Jar”并将 Maven 目标配置为“Maven Goal package”的配置。
这样当我运行这个配置时,前端就被编译和构建了。 但是无论我选择 Spring Boot 还是这个配置,我总是在运行控制台中看到以下日志
o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
我想这意味着我正在嵌入式服务器中部署应用程序。
所以我的问题是:
1:如何在本地 Tomcat 而不是嵌入式中部署和运行 Intellij 中的应用程序。 2:是否有更好的配置来构建前端并在 Intellij 上自动开箱即用地部署它?
在 JSF 项目的 Eclipse IDE 中,我只需向项目添加一个服务器,然后 Eclipse 构建应用程序并将其部署到它并管理所有内容。
提前致谢 最好的问候
最佳答案
1:如何在本地 Tomcat 而不是嵌入式中部署和运行 Intellij 中的应用程序。
您已经提供了范围,因此嵌入式 tomcat 将不会包含在您的工件中。 IntelliJ 有一个选项可以在运行时加载类路径上提供的依赖项。 (它被称为 Include dependencies with "Provided
scope"并且可以在 Configuration 选项卡下找到,然后在 spring boot run config 的 Environment 部分找到。
除了使用 spring boot run config,您还可以自己在本地安装 tomcat,并使用应用程序服务器插件对其进行管理和部署。
为“Tomcat”创建一个新的运行配置,然后选择“本地”。在这里,您将能够配置您的本地 tomcat 实例,以便它知道将它部署到哪里。
2:是否有更好的配置来自动构建前端并与后端一起部署,并且在 Intellij 上开箱即用?
我不能说它是否更好,但我有一个使用不同方法的类似设置。请随时在这里查看我的 repo 协议(protocol):https://github.com/phazebroek/tour-of-rockstars
客户端模块包含前端 Angular 应用程序,api 是 spring-boot 后端。客户端使用 frontend-maven-plugin
构建它并将输出放在目标路径中。然后我的 api 模块利用 maven-resources-plugin
插件在 maven 验证阶段将它们复制到我的 spring boot 目标目录的静态文件夹中。这样做的效果是我的 Angular 应用程序被打包并包含在静态文件夹中后端 spring 引导应用程序的 war 文件中,因此我可以使用 spring 提供它的内容。因此,例如,如果您在 :8080 上运行您的应用程序,您可以在同一端口上访问您的 Angular 应用程序。例如:8080/应用/富。
请注意,例如,您应该在 REST 端点前加上/api 以避免与 Angular View 发生冲突 :-) 例如,如果你有一个名为/foo 的 REST 端点,但你也有一个带有 url/foo 的 Angular 小部件,它将发生冲突。 (我还没有为那个存储库修复那个问题...)
额外注意:在不同端口上以独立模式从 Angular 应用程序调用后端 api
附带说明一下, Controller 包含注释 @CrossOrigin(origins = "*")
以允许来自 Angular 应用程序的请求,当它作为独立应用程序在不同的端口上运行时.当然,这应该只在开发模式下使用!
关于angular - 在 IntelliJ 中的本地 Tomcat 上部署 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481504/