2012-07-27 213 views
1

我有两个maven项目project/foo/pom.xmlproject/bar/pom.xml。我有foo取决于bar, and I want that every time foo/pom.xml compiles, it'll automatically compile bar`。maven项目如何依赖另一个本地maven项目?

我该怎么用maven做到这一点?

更新:我掖他们两个到父项目,但后来,我将要如果我要运行一个子项目mvn jetty:run吗?

回答

0

这是不可能单独使用maven。您可以得到的最接近的数字是modules of an aggregator POM,因此您可以使用单个命令构建两者。请注意,mvn install已经考虑自上一次构建以来是否发生过更改,因此您可以节省几个CPU周期。

1

选项1

设置都建立在Jenkins,可同时检测项目间的依赖

自动构建从模块依赖关系链

詹金斯读取你的项目的依赖关系,从你的POM,如果它们也建立在Jenkins的 上,触发器的设置方式使得在其中一个依赖关系 中的新构建将自动启动项目的新构建。

选项2

如果两个Maven项目是密切相关的(一起发布,共享相同的版本号),那么或许他们真的在同一个项目的两个模块?

如果是这样的情况下阅读下面的文档,关于如何创建一个父POM准则:

+0

见上面,我怎么可以运行'命令mvn码头:run'从模块'bar'取决于'foo'? – 2012-07-27 11:25:42

1

您可以将它们合并成一个项目,两个模块。

一个例子项目结构:

 
parent (pom) 
    |- foo (jar) 
    |- bar (jar) 

在父POM:

<groupId>org.me</groupId> 
<artifactId>parent-project</artifactId> 
<packaging>pom</packaging> 

<modules> 
    <module>foo</module> 
    <module>bar</module> 
</modules> 

在每个子POM:

<artifactId>foo</artifactId> 
<packaging>jar</packaging> 

<parent> 
    <groupId>org.me</groupId> 
    <artifactId>parent-project</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

要生成项目(两个模块)与Maven ,请从父目录执行此操作:

$ mvn install 
+0

但是如果我想在模块'bar'上运行'mvn jetty:run'呢? – 2012-07-27 11:25:05

+0

如果'bar'是一个战争项目(并且'foo'是一个jar,'bar'取决于'foo'),相同的项目结构将起作用。在这种情况下,就像通常那样,从'bar'目录运行'mvn jetty:run'。 – Daniel 2012-07-27 11:59:46

0

首先,按照Daniel的说法设置多模块构建。然后转到包含父POM的目录。然后,例如之前安装有自动安装酒吧富,太,类型:

mvn --also-make --projects foo install 

这将检查依赖反应器内,然后解析运行上栏安装的生命周期就运行安装生命周期之前在foo上。

这适用于任何生命周期或目标。不过,请注意,如果您指定jetty:run,那么这个目标将在两个项目中运行,这可能不是您想要的。

您可以找到有关此功能在这里的更多信息:http://maven.apache.org/guides/mini/guide-multiple-modules.html

+0

完全不起作用,因为'jetty'插件在所有模块中都不可用。没有其他解决方案吗? – 2012-07-27 11:48:23

相关问题