2011-06-01 133 views
4

我工作的一个多项目,而现在我有一个类似于此的结构(实际上有几个罐子的项目和一些战争项目)的Maven - 项目之间共享库

/myProj 
|_______projA (jar) 
|   |____pom.xml 
|   |____target/jar files 
|_______projB (war) 
|   |___pom.xml 
|   |___web-inf/lib/jarfiles 
|_______projEar 
|   |___pom.xml 
|___pom.xml 

我想实现的目的是让projAprojB从公共共享文件夹中读取它们的依赖关系,而不是保留它们自己的副本。实际上,我并不关心他们在编译时阅读它们的位置,但是当我打包我的EAR文件时,我希望每个jar/war只出现一次,因此减少了EAR大小。

我试过声明父pom的依赖关系,声明依赖关系和其他一些东西,但到目前为止我还没有实现这一点。

有没有简单的方法来实现这一目标?任何简单的Maven插件?

在此先感谢。

回答

6

您应该能够通过添加JAR作为依赖你的耳朵的pom.xml做到这一点:

<dependencies> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-web</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

...并指定依赖在你的战争的pom.xml提供:

<dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 

如果Maven的/等工装已复制的JAR到你的WEB-INF/lib目录,您可能需要删除文件前手动重建。

这将导致窗体的EAR:

META-INF/MANIFEST.MF 
lib/myapp-utils-0.0.1-SNAPSHOT.jar 
META-INF/application.xml 
myapp-web.war 
3

当你正在向Maven的时候,你不应该存储依赖JAR在你的代码库。我建议你创建一个中央的Maven仓库,它将包含所有的依赖关系。

请参阅mvn install先将这些工件安装到本地存储库中。另外,您可以参考maven central repository在构建时获取工件。

你需要做的是:从源代码中删除所有的依赖jar,以及它们在pom.xml中的所有依赖。这些将在需要时从Maven中央存储库下载和打包。相应地设置工件的Dependency Scope