Java 没有子模块作为jar文件的Maven多模块

Java 没有子模块作为jar文件的Maven多模块,java,maven,Java,Maven,我有两个maven web应用程序,比如ProjectA和ProjectB,它们打包为WAR文件。两个应用程序都使用第三个maven应用程序ProjectC,其中包含一些共享类。我在ProjectA和ProjectB中添加了ProjectC作为依赖项 ProjectA和ProjectB使用maven jetty插件在Eclipse中运行,但在生产环境中,它作为WAR文件部署到Tomcat web服务器 在我开始共享一些hibernate实体之前,这种方法一直工作得很好。由于我在这个问题中描述的问

我有两个maven web应用程序,比如ProjectA和ProjectB,它们打包为WAR文件。两个应用程序都使用第三个maven应用程序ProjectC,其中包含一些共享类。我在ProjectA和ProjectB中添加了ProjectC作为依赖项

ProjectA和ProjectB使用maven jetty插件在Eclipse中运行,但在生产环境中,它作为WAR文件部署到Tomcat web服务器

在我开始共享一些hibernate实体之前,这种方法一直工作得很好。由于我在这个问题中描述的问题,无法将persistence.xml与ProjectC.jar中的实体链接,因此我必须找到一些替代解决方案

我认为,如果我能在编译ProjectA和ProjectB时编译ProjectC类,那么它会起作用,因此结构如下所示:

projectA 
 -WEB-INF 
   -classes    
     -project-a.classes
     -project-c.classes
projectB 
 -WEB-INF 
   -classes    
     -project-b.classes
     -project-c.classes
而不是:

projectA 
 -WEB-INF 
   -classes    
     -project-a.classes
   -lib
     -project-c.jar
projectB 
 -WEB-INF 
   -classes    
     -project-b.classes
   -lib
     -project-c.jar
我不知道maven多模块方法是否可以实现这一点,但也欢迎其他一些解决问题的想法


谢谢,

尝试在war清单中设置
addClasspath=true
,并将您的war类打包到jar中

你会有这样的战争结构

projectA -WEB-INF -lib -project-a.jar -project-c.jar 项目A -WEB-INF -解放党 -project-a.jar -project-c.jar 了解如何将第三个项目(如项目C)的资源作为资源解包到另一个项目中。这是一本优秀而简单的指南。
您可以考虑将实体作为项目A和B的类来包含,但将persistence.xml和其他公共文件放在新项目中,并将java类(您的实体)保存在单独的jar项目中会更容易。

我不确定是否理解您的想法,但这仍然会将我的共享项目添加为jar文件,并且hibernate persistence.xml将无法访问实体。这不会改变任何事情,因为项目C中的hibernate实体将位于jar文件中。Persistence.xml位于main/resources/META-INF/Persistence.xml中,它包含lib/project-c.jar。但是,无法从此位置找到此jar文件。这个讨论很好地解释了为什么我不能在我的项目中使用jar文件——所有这些示例都是ear文件。它不适用于未嵌入ear的war文件。这将使我们进一步的工作变得复杂,需要进行大量的修改。如果可能的话,我想避免。谢谢你的想法。我同意,如果与hibernate相关的所有内容都在共享项目中,那将是最好的。问题在于项目A是健壮的,并且它使用Spring。我不想在其他项目中使用Spring。如果我想在两个项目中使用相同的配置,这将需要很多更改,但我一定会尝试。目前,我正在尝试找出是否有可能在项目b中的某个位置使用META-INF/persistence.xml,在那里它可以访问/lib/project-c.jarforWelcome。您可以始终使用元素(而不是use)在persistence.xml中指定实体。那么,只要project-b可以“访问”project-c(如位于web inf/lib文件夹中或运行时环境/服务器对war应用程序有权限),您就不会遇到与project-c位置相关的问题。噢,不,有100多个实体,而且仍在更改中,所以维护它会让人沮丧。我明天会按照你的建议在共享项目中使用persistence.xml。最后,我按照你在文章末尾的建议做了。我已经将persistence.xml和其他负责hibernate的类放到了共享项目中,它可以按照我的要求工作。谢谢