0

我有一个带有几个子模块的父 POM。对于其中一个,我在 build 下添加了一个 antrun 部分 - 目前这只是打印一个语句。此子模块依赖于整个集合中的其他模块(因此父模块有 8 个子模块 1 - 8,此模块(#5)依赖于 2 和 3)

antrun 部分的格式为:

<build>...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <echo>*******************  Running generate </echo>
                     </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

如果我在父模块下执行一个操作(例如,验证或安装),这些工作正常,并且正如预期的那样,为持有这个 antrun 任务的子(#5)运行 echo 语句。

但是,如果我去子模块并从那里尝试 mvn validate 我得到(传奇)

could not resolve dependencies for project...

失败。但是所有模块都存在于我的本地存储库中,并且它们是最新的。对于再次执行 mvn install 这个问题的通常解决方法并不能解决它。

对我来说,这看起来像是一个错误,除非其他人知道(到底是什么)出了差错。

克里斯

4

2 回答 2

0

如果您在 maven 中调用子模块,则必须以特定方式进行。

 +-- root (pom.xml)
       +-- mod-child-1
       +-- mod-child-2
       +-- mod-child-3
       +-- mod-child-4
       ....

如果您喜欢这样做,例如对于 mod-child-3,您需要首先通过 root 执行 mvn install ...之后,您可以从多模块构建的 root 位置执行以下操作:

mvn -pl mod-child-3 package 
于 2012-03-23T20:36:30.850 回答
0

好吧,这是我的错。我在父项目中添加了一个额外的 POM。我希望只是将常见的依赖项放在那里,以保持顶级 POM 与响应、分发内容等。

maven 似乎可以在本地使用它,但不会将这个仅 POM 的人工制品部署到 repo - 所以这从来没有在那里找到。难题是为什么在从父级执行构建时这仍然有效。

无论如何它是固定的 - 我已经将 dep 的东西折叠到我的单亲 POM 中,一切都很好。感谢大家的反馈。

于 2012-03-28T16:19:58.133 回答