如何在多模块项目中跳过pom的构建

时间:2012-06-04 16:55:36

标签: maven-3

我正在尝试优化构建过程(在开发中),以构建整个maven多模块项目树。一些POM实际上是源(/通常)永远不会改变的源/库的聚合。所以具体的子问题是

  1. 如果在POM:project / build / sourceDirectory属性中指定的源没有变化,是否有可能以某种方式将maven配置为不构建pom?

  2. 或者是否可以(至少)有条件地禁用maven-bundle-plugin? - 大部分时间都需要。

  3. Google无法找到任何与Q#1相关的内容。典型的解决方案不适用于#2 - 当我尝试为maven-bundle-plugin指定'执行'时(像这样)

    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>${maven-bundle-plugin.version}</version>
        <extensions>true</extensions>
        <executions>
            <execution>
                <id>osgi-bundle</id>
                <phase>bundle</phase>
                <goals>
                    <goal>bundle</goal>
                </goals>
    

    我在输出中收到此错误

    [bundle:bundle]
    Bundle artifact-id:bundle-id:bundle:0.1.0-SNAPSHOT : The JAR is empty: dot
    Error(s) found in bundle configuration
    

    感谢任何帮助。我知道如下:
    * Disable a Maven plugin defined in a parent POM (maven-bundle-plugin无法使用'executions'标签)
    * Skip execution of a maven plugin if a file does not exist(maven-bundle-plugin没有跳过配置选项)
    * How to skip lifecycle phase in multi maven module(与之前相同)
    *如果将整个maven-bundle-plugin移动到配置文件中,则maven无法识别packaging = bundle。

4 个答案:

答案 0 :(得分:2)

最后,我必须承认(C)Eugene Kuleshov - “Maven通常不跟踪来源/变化,所以它总是完整的构建。”

但是,在.NET上5+以及在C ++上使用5年以上之后回到Java,对于我而言,像增量构建这样的常见功能不支持具有history的广泛使用的工具看起来很奇怪10年以上所以我不能花时间等待重建我的多模块项目中的每个未更改的模块,并决定制作Maven 3.0.4的自定义版本:)

可以在http://code.google.com/p/maven-onchange-activator/抓住它,尝试报告问题。

答案 1 :(得分:0)

Maven通常不跟踪源/更改,因此它始终是完整版本。但是,要禁用任何插件,您可以将其移至profile,然后启用/停用整个配置文件,例如有条件地或从命令行。

答案 2 :(得分:0)

您应该查看

之类的内容
mvn -am 

的关系
mvn -pl ...

所以做一个类似的构建:

mvn -am -pl SubModule clean package

将构建only those modules which have been changed,并且由于对更改模块的依赖而需要构建它。

答案 3 :(得分:0)

我建议切换到Gradle。 Gradle具有开箱即用的支持(无需配置),Maven的转换应该很容易。