1

我的 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-apiweb-client。它做了两件重要的事情:

  1. 它是 pom.xml 用于spring-boot-maven-plugin构建独立可运行文件jar- 我的最终目标
  2. 它提供main(String args[])@SpringBootApplicationSpringApplication.run(EasyModelAccessServer.class, args);

我目前能够告诉 Eclipse 在 servlet 容器中运行它。服务器启动,我的两个资源,rest-apiweb-client工作。到目前为止一切都很好。

问题

没有完全工作的是独立的。如果我打包整个东西并运行服务器:

$ path/to/application: mvn clean package
$ path/to/application: java -jar target/application.jar

只有 REST API 可以工作。原因是web-client没有作为 web 应用程序添加或引入 Spring 内置的 Tomcat

问题

是我如何使这项工作。我想到了两个选择:

  1. 以某种方式将web-client.war文件潜入其中application.jar,使其可作为资源使用并以编程方式调用tomcat.addWebapp("/web-client", "path/to/web-client.war")(或类似的方法)以加载附加服务
  2. 希望这个spring-boot-maven-plugin或另一个 Spring Maven 插件可以为我做到这一点,并找到将我链接到示例的人。

我已经用 1 试过了。但我没有成功web-client.war进入application.jar,但我也不确定我是否应该这样做。


常问问题

问:为什么要将所有内容分开,而不是将所有这些模块合并到一个server模块中,让 Spring Maven 插件开箱即用地为你做所有事情?

A:我真的很想将客户端代码与服务器代码分开。但是我可以合并web-clientapplication但上次我尝试了我有 10 个其他问题,为什么这没有解决,所以我决定保持这种方式,并且实际上加载额外的服务器资源不应该那么难。

问:我可以看看这个项目吗?

答:是的,你可以。看看:https ://github.com/silentsnooc/easy-model-access请原谅我,我目前使用的是制表符而不是空格 - 我将在一切启动并运行后立即更改它。

4

0 回答 0