如何为Maven指定模块的顺序?

时间:2010-08-27 15:08:16

标签: java maven-2

项目结构是:

/foo
  pom.xml
  /foo-war
    pom.xml
  /foo-ear
    pom.xml

这是我的父pom.xml

..            FOO战
      FOO耳          ..

这是foo-ear/pom.xml

的内容

..                           $ {} project.groupId             FOO战             战争             $ {} project.version                   ..

编译失败并显示以下消息:

...
[INFO] Failed to resolve artifact.
Missing:
—————
1) com.foo:foo-war:war:1.0-SNAPSHOT
Try downloading the file manually from the project website.
...

看起来foo-ear正在尝试解决尚未准备好的工件。如何指示maven事先与foo-war合作?或者我错过了什么?

PS。当我从父pom.xml删除此代码时,一切都已修复:

<build>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${javadoc.version}</version>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                   <goal>aggregate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</build>

为什么?

3 个答案:

答案 0 :(得分:5)

  

当我从父pom.xml(...)

中删除此代码时,所有内容都已修复

问题类似于 MJAVADOC-161 ,更常见的是 MJAVADOC-137 。您是否可以使用像maven-javadoc-plugin这样的错误版本(遗憾的是,您没有展示它)?如果是,请尝试使用2.4版或其他更新版本。如果您使用的是大于2.4的版本,请尝试使用版本2.4以查看是否在某些时候引入了回归。在这种情况下,请打开一个新问题。


  

我正在使用2.5版。当我试图反转回2.4我得到:'aggregate'在执行中指定,但在插件中找不到。看起来2.5是我唯一的选择吗?您认为我需要提交错误报告吗?

我没有注意到目标,javadoc:aggregate已在版本2.5中引入,因此它确实不会在2.4中,并且上述问题无关紧要。

但我再看了一眼,我看到了其他一些像MJAVADOC-275MJAVADOC-276的人。我不确定是否了解确切的状态(并且错误可能没有修复)但在开启问题之前,请务必尝试使用版本2.7和版本2.6(有些人提到2.6.1中引入的回归)。

答案 1 :(得分:3)

Maven自动解析模块之间的依赖关系并以正确的顺序构建它们 (至少如果您使用的是相当当前的版本),但仅限于您从父项目构建。 (负责此操作的Maven组件称为Reactor)。

如果这不起作用,那么模块可能与引用的依赖项不同(例如版本不匹配)。

请比较

<groupId><artifactId><version><packaging> / <type>

a)耳中的依赖块和

b)战争的pom标题

答案 2 :(得分:1)

看起来好像正确设置在上面。它看起来不像构建订单问题。

当您从顶层运行时,Maven将输出反应堆构建顺序,例如:

[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO]   foo-ear
[INFO]   foo-war

这看起来不错吗?

你是否还在你的WAR pom中建立了1.0-SNAPSHOT?如果您导航到foo-war和'mvn install'然后尝试从顶层构建会发生什么?