0

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

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

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

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

任何帮助表示赞赏。我知道以下内容:
*禁用父 POM 中定义的 Maven 插件 (maven-bundle-plugin 不能使用 'executions' 标签)
*如果文件不存在,则跳过执行 maven 插件(maven-bundle -plugin 没有跳过配置选项)
*如何在多 maven 模块中跳过生命周期阶段(与之前相同)
* 如果将整个 maven-bundle-plugin 移动到配置文件中,maven 无法识别 Packaging=bundle。

4

4 回答 4

2

最后我不得不承认 (C) Eugene Kuleshov - “Maven 通常不跟踪源/更改,所以它总是一个完整的构建。”

但是,在 .NET 上 5 年以上和 C++ 上 5 年以上之后回到 Java,我觉得很奇怪,像增量构建这样的常见功能不被具有10 年以上历史的广泛使用的工具支持。所以我不能花时间等待重建我的多模块项目中的每一个未更改的模块,并决定制作 Maven 3.0.4 的定制版本 :)

随意在这里http://code.google.com/p/maven-onchange-activator/获取它,尝试并报告问题。

于 2012-09-07T22:41:58.447 回答
0

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

于 2012-06-04T18:05:23.933 回答
0

你应该检查像

mvn -am 

mvn -pl ...

所以做一个像这样的构建:

mvn -am -pl SubModule clean package

仅构建那些已更改并且由于对更改模块的依赖而需要构建的模块。

于 2012-06-05T12:45:21.090 回答
0

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

于 2014-11-04T11:23:44.190 回答