我想使用Spring Rest在我的基于Spring的多模块项目中开发RESTful API。为此,我有一个webapp模块和一些其他业务/数据层模块。例如,这将是我简化的项目结构:
myProject
-- webapp (war-packaged)
-- business (jar-packaged)
-- data (jar-packaged)
业务模块依赖于数据模块,业务模块上的webapp也是如此。 Webapp成功导入每个模块的应用程序上下文。现在我希望能够使用一些业务模块类,根据从数据库中检索到的某些数据进行某种计算,以便提供某种资源。我看过的所有例子都非常简单,这种多模块方法根本没有涉及。
有什么问题?就我而言,Tomcat按特定顺序加载类。具体来说,它首先加载WEB-INF / classes,然后才加载WEB-INF / lib(其中放置了所有webapp依赖项,在这种情况下为业务模块)。那么,我的问题就出现了。 我应该在哪里放置我的Controller类?如果我将它们放在webapp模块中,我将无法自动装配任何业务模块bean,因为Tomcat将抛出 ClassNotFoundException 我部署了webapp战争(至少这是我经历过的行为)。
答案可能很简单,但我对Spring及其世界都很陌生!
提前谢谢大家。
答案 0 :(得分:0)
您的业务和数据jar将进入WEB-INF / lib目录。然后,在部署应用程序时,这些jar将自动添加到应用程序的CLASSPATH中。您需要将应用程序部署为WAR文件。
理想情况下,您可以构建业务和数据jar,将它们添加到某个存储库,然后构建系统会将每个jar的正确版本拉到WEB-INF / lib目录中。
至于最初的问题,控制器类进入webapp / src目录。
答案 1 :(得分:0)
假设您正在使用Maven 2.确保您的程序集创建者(例如maven war模块)在最终的.war文件的WEB-INF / lib目录中包含您的依赖.jar文件。这应该是默认程序(per: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'在新目录中爆炸)。
希望这有帮助!