我的 Maven 项目中有三个模块:
parent
rest-api # Spring REST API
web-client # AngularJS web client
application # Project to bundle it all up for a standalone
我不确定我这里是否有一个“优雅”的解决方案,所以如果这完全是垃圾,请用棍子打我,但这就是它的工作方式 - 或者它应该如何工作:
休息API
模块rest-api
只是提供 REST API 和其他核心功能——基本上它是纯服务器代码。这是一个jar
神器。
网络客户端
为了分离客户端和服务器代码,我有模块web-client
。这是一个war
包含客户端 webapp 的项目。
应用
这个模块应该把它全部粘起来。这取决于rest-api
和web-client
。它做了两件重要的事情:
- 它是 pom.xml 用于
spring-boot-maven-plugin
构建独立可运行文件jar
- 我的最终目标 - 它提供
main(String args[])
了@SpringBootApplication
以SpringApplication.run(EasyModelAccessServer.class, args);
我目前能够告诉 Eclipse 在 servlet 容器中运行它。服务器启动,我的两个资源,rest-api和web-client工作。到目前为止一切都很好。
问题
没有完全工作的是独立的。如果我打包整个东西并运行服务器:
$ path/to/application: mvn clean package
$ path/to/application: java -jar target/application.jar
只有 REST API 可以工作。原因是web-client没有作为 web 应用程序添加或引入 Spring 内置的 Tomcat 。
问题
是我如何使这项工作。我想到了两个选择:
- 以某种方式将
web-client.war
文件潜入其中application.jar
,使其可作为资源使用并以编程方式调用tomcat.addWebapp("/web-client", "path/to/web-client.war")
(或类似的方法)以加载附加服务 - 希望这个
spring-boot-maven-plugin
或另一个 Spring Maven 插件可以为我做到这一点,并找到将我链接到示例的人。
我已经用 1 试过了。但我没有成功web-client.war
进入application.jar
,但我也不确定我是否应该这样做。
常问问题
问: “为什么要将所有内容分开,而不是将所有这些模块合并到一个server
模块中,让 Spring Maven 插件开箱即用地为你做所有事情? ”
A:我真的很想将客户端代码与服务器代码分开。但是我可以合并web-client
,application
但上次我尝试了我有 10 个其他问题,为什么这没有解决,所以我决定保持这种方式,并且实际上加载额外的服务器资源不应该那么难。
问: “我可以看看这个项目吗? ”
答:是的,你可以。看看:https ://github.com/silentsnooc/easy-model-access请原谅我,我目前使用的是制表符而不是空格 - 我将在一切启动并运行后立即更改它。