1

我想在我的基于 Spring 的多模块项目中使用 Spring Rest 开发一个 RESTful API。为此,我有一个 webapp 模块和一些其他业务/数据层模块。例如,这将是我简化的项目结构:

myProject
  -- webapp (war-packaged)
  -- business (jar-packaged)
  -- data (jar-packaged)

业务模块依赖于数据模块,webapp 依赖于业务模块。Webapp 成功导入每个模块的应用程序上下文。现在我希望能够使用一些业务模块类,根据从数据库中检索到的一些数据进行某种计算,以提供某种资源。我看过的所有示例都非常简单,并且根本没有涵盖这种多模块方法。

问题是什么?就我而言,Tomcat 按一定顺序加载类。具体来说,它首先加载 WEB-INF/classes,然后才加载 WEB-INF/lib(放置所有 webapp 依赖项,在这种情况下为业务模块)。所以,我的问题来了。我应该把控制器类放在哪里?如果我将它们放在 webapp 模块中,我将无法自动装配任何业务模块 bean,因为当我部署 webapp 战争时 Tomcat 会抛出ClassNotFoundException(至少这是我经历过的行为)。

答案可能很简单,但我对 Spring 及其世界还很陌生!

谢谢大家。

4

2 回答 2

0

假设您使用的是 Maven 2。确保您的程序集创建者(例如 maven war 模块)将您的依赖 .jar 文件包含在最终的 .war 文件的 WEB-INF/lib 目录中。这应该是默认程序(根据:http ://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#dependentWarIncludes )。另一个问题是您的子项目(业务和数据)是否正在创建 jar,以便它们可以包含在 WAR 输出中。

如果您对该 war 文件的内容有疑问,请通过从命令行执行 'jar tvf $WAR_FILENAME' 并观察 WEB-INF/lib 目录内容来浏览它的列表。您应该在那里看到您的业务和数据罐。进一步扩展您的 war 文件,然后浏览业务和数据 jar 的内容(使用 'jar xvf $FILENAME' 在新目录中扩展)。

希望这可以帮助!

于 2013-05-08T05:51:22.730 回答
0

您的业​​务和数据 jar 将进入 WEB-INF/lib 目录。然后,当您部署它时,这些 jar 将自动添加到您的应用程序的 CLASSPATH 中。您需要将应用程序部署为 WAR 文件。

理想情况下,您将构建业务和数据 jar,将它们添加到某个存储库,然后构建系统将为您将每个 jar 的正确版本拉入 WEB-INF/lib 目录。

至于最初的问题,控制器类进入 webapp/src 目录。

于 2013-05-07T21:42:59.697 回答