Maven - 在项目之间共享库

时间:2011-06-01 19:26:32

标签: maven java-ee maven-2 maven-3 ear

我正在开发一个多项目,现在我有一个类似于此的结构(实际上有几个jar项目和几个战争项目)

/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插件?

提前致谢。

2 个答案:

答案 0 :(得分:6)

您应该可以通过将JAR作为依赖项添加到EAR的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>

...并指定WARs的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

答案 1 :(得分:3)

当您迁移到Maven时,不应将依赖项JAR存储在代码库中。我建议你创建一个包含所有依赖项的中央Maven存储库。

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

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