如何编译一个maven 3项目取决于另一个maven 3项目的安装?

时间:2013-05-20 02:17:17

标签: maven-3

我有一个带有pom.xml的目录和几个带有自己的pom.xml文件的子目录

一个子目录是本地名为thirdparty。它包含几个jar文件,并在执行mvn install时将它们安装到本地maven仓库。这些是其他工件的mvn compile阶段所需要的。 root pom.xml只是在每个子pom.xml上执行相同的步骤。

我想修改root pom.xml,以便mvn compile在执行其他文件夹之前在第三方文件夹上执行安装。我在maven-compiler-plugin中试过这个:

<executions>
    <execution>
        <id>thirdparty</id>
        <phase>install</phase>
    </execution>
</executions>

我在文档中没有看到关于在依赖元素中指定阶段的内容。

3 个答案:

答案 0 :(得分:1)

为了确保我有这个直线,听起来你有一个聚合器pom,AGG和一些子模块A和B,其中A只是一些必须安装在本地仓库中的第三方罐子B会编译。如果这是真的,那么我会想到两种可能性:

1)不要使用A,而是将第三方jar安装到适当的独立仓库中,如local Nexus server,并将该仓库添加到您的pom中。这将是“Maven”的做法。

2)将A的依赖关系添加到B的<dependencies>。在A中,配置install plugin每个需要安装的jar执行,并将这些执行绑定到compile阶段。然后当你在AGG上运行compile时,它将首先在A上运行compile,这将安装所有的jar,然后在B上运行compile。请注意,这将产生副作用产生一个A.jar,它将是B的依赖,因为maven假设每个模块只生成一种类型的一个工件。您可能被迫添加至少一个类或资源,以便实际构建A.jar。不确定那一个。或者,您可以尝试将A的包装设置为“pom”。

答案 1 :(得分:0)

我相信你是以错误的方式使用Maven。

在运行编译工作之前,应将此类第三方依赖项放入本地存储库(或内部Maven存储库),并相应地设置项目中的依赖项。 “第三方工件的安装”不应该是构建过程的一部分。

而且,在Maven世界中,我们很少将第三方库作为源代码的一部分存在。事实上,使用Maven的原因之一就是在源代码中摆脱这种类型的库。

答案 2 :(得分:-1)

听起来你想要几个依赖项。查看depends元素。