java - 同时运行 grunt 和 tomcat 服务器的 Web 应用程序(Spring、Angular、Grunt、Maven、Tomcat)

标签 java spring angularjs gruntjs maven-tomcat-plugin

好的,所以我一直在阅读其他几个堆栈问题,并试图在没有太多运气的情况下将它们拼凑在一起。基本上我的方法是我目前有一个项目有多个子项目。我基本上有以下内容:

root
|----backend
|----|----src
|----|----|----main
|----|----|----|----java (individual java files not shown)
|----|----|----|----resources
|----|----|----|----|----META-INF
|----|----|----|----|----|----applicationContext.xml
|----|----|----|----webapp
|----|----|----|----|----WEB-INF
|----|----|----|----|----|----web_servicesConfig.xml
|----|----|----|----|----|----web.xml
|----|----pom.xml
|----deploy
|----|----src
|----|----|----main
|----|----|----|----resources (properties files for tomcat)
|----|----pom.xml
|----frontend
|----|----app
|----|----|----angular files
|----|----bower_components
|----|----|----bower files
|----|----bower.json
|----|----Gruntfile.js
|----|----pom.xml

好的,希望文件结构已经足够清楚了。我打算使用 maven-grunt-plugin,这样我就可以在前端运行我的 grunt 命令。前端与 yo angular 产品的设置基本相同,或者至少是目标。部署只需设置 tomcat,后端拥有 Spring 4 restful 服务/api。

好的,这就是我感到困惑并寻求帮助的情况。我不知道如何让前端与后端正常工作。基本上我想知道是否有办法告诉 maven 在开发模式下启动 Tomcat 和 Grunt 服务器,以便我可以使用它们的两个功能来快速开发我的项目,然后将 min 文件拉入生产构建的 war 中.我想我无法弄清楚如何让所有东西一起玩得很好。我检查了这个问题,关于它的讨论,但我仍然感到困惑:

How to deploy AngularJS app and Spring Restful API service on the same domain/server?

我喜欢任何指向教程的链接,这些教程介绍了如何将 Maven 与 tomcat、spring、angularjs 和 grunt 一起使用……还有 bower,这样我就可以将它用于我的前端包管理。我已经阅读了几个示例,并且看到了很多关于如何将 spring 与 Java EE 和 jsp 一起使用的讨论。或者使用 Gradle 做一些我想做的事情……但与我正在尝试的完全不同。

当然,如果这是一个糟糕的方法,请告诉我。基本上我想让我的子项目尽可能分离,同时仍然允许开发人员从一个 pom 文件导入/运行。

最佳答案

从你的问题中我只挖掘出两个问题

  1. 如何使用 grunt/bower + tomcat 进行持续开发
  2. 如何部署生产

1 - 持续发展

我为此选择的解决方案 - 因为您已经使用了 api沟通client <-> server - 是将这两个项目完全分开

那到底是什么意思呢? 对我来说是有两个不同的存储库。一个用于客户端,一个用于服务器 通过这种方式您可以获得一些好处:

  • 拆分项目的工作(前端/服务器端)
  • 更易于维护
  • 如果您想支持“仅 API”,例如移动应用程序等。

但是 - 他们在开发过程中如何沟通?

这是一个很好的问题: 一种解决方案是在本地主机上并行运行两个服务器,即 mvn clean tomcat:run -P yourprofile; grunt server

但是 - 如果我尝试从不同端口从客户端访问服务器端,我会跨域吗? 你是对的。在这里,您可以得到 grunt 及其插件的帮助。获取 grunt-connect-proxy 的副本

这个插件有什么好处,它充当 grunt 服务器和 tomcat 服务器之间的中间件,因此您向 grunt 服务器询问 API 但实际上 grunt 要求 tomcat 服务器对此做出回答(当然是在幕后)

2 - 为生产部署

我想这是个人喜好问题。我发现 war 文件非常大,无法一次又一次地上传(即使能够在所有 tomcat 应用程序之间共享库)。我想到的解决方案是通过 git 进行部署。

好的,但我有一个很大的 war 文件。我该怎么做?

对我来说,我使用我用 bash 编写的部署脚本。这是它的作用:

  1. 标记当前来源
  2. 运行 mvn clean package war:exploded -P your-prod-profile(这也会运行测试和集成测试)
  3. 使用上述命令,您可以将所有已编译项目的文件放在一个地方,而不是一个大的 war 文件。
  4. 将所有这些文件(和内部路径)复制到外部文件夹(我使用另一个存储库通过 git 进行维护部署。所以基本上我有 3 个存储库。一个用于服务器源,一个用于客户端源,一个用于服务器二进制文件。)
  5. 在执行 4 之前确保从中删除所有文件和文件夹(除了 .git 东西)
  6. 4 后执行“git add -A”
  7. "git commit -a -m '新生产版本 X"
  8. 您可以在前后标记一些标签,以便在新产品中出现大错误时轻松恢复最后的代码
  9. 在服务器上运行远程命令以 a.) 停止服务器,b.) 从二进制存储库中提取最后的更改,c.) 再次运行服务器。
  10. 对我来说,我所做的是在 tomcat 应用程序与外部文件夹(二进制存储库)之间建立符号链接(symbolic link),所以

希望这能给你一些指导,

最好的, 橡木

关于java - 同时运行 grunt 和 tomcat 服务器的 Web 应用程序(Spring、Angular、Grunt、Maven、Tomcat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086853/

相关文章:

javascript - 如何通过匹配特定字符串将一个 ng-model 中的值绑定(bind)到另一个

java - 为什么在使用 spring 和 CXF 时会出现 bad_certificate 错误

使用信号量的 Java 男女通用浴室程序 - 逻辑问题

angular - 如何避免Angular和Spring boot项目中的CORS问题?

javascript - 在 AngularJS 中通过 $index 跟踪

angularjs - angular-ui-bootstrap typeahead 可以用作自动完成功能吗?

java - 无法从文本文档检索 XBookmarksSupplier

java mysql 执行更新更新

java - Spring 3.0 MVC Controller 请求映射

java - 添加项目 A (Spring 4.2.x) 作为项目 B (Spring Boot 2、Spring 5) 的依赖项