如何在子模块目录中运行mvn时让Maven找到兄弟模块?

时间:2011-05-20 00:02:40

标签: maven

例如,我有一个游戏项目:

superegg/
  |- game/
  |   `- pom.xml -> (a lot of jars.)
  |- ai/
  |   `- pom.xml
  |- sprite/
  |   |- egg/
  |   |   `- pom.xml -> sprite
  |   |- badguy/
  |   |   `- pom.xml -> sprite, ai
  |   `- pom.xml -> game
  ` pom.xml

(此处-->表示依赖于

所有子模块都是SNAPSHOT版本,它们没有安装,也没有部署。

现在,我想在badguy/中执行某些操作:

.../sprite/badguy/ $ mvn exec:java ...

但是,maven尝试从maven存储库中找到依赖项sprite, ai,而不是../../game../../ai

如何让Maven解决项目目录中的子模块依赖关系?

我没有安装它们,因为子模块太多(虽然这里没有列出),完全编译/安装过程需要很长时间)。我也试过但没有成功:

superegg/sprite/badguy/ $ mvn --reactor dependency:build-classpath
    [INFO] Cannot execute mojo: build-classpath. It requires a project with an existing pom.xml, but the build is not using one.

superegg/ $ mvn -pl sprite/badguy dependency:build-classpath
    Missing dependencies: ...

superegg/ $ mvn --reactor -pl sprite/badguy dependency:build-classpath
    Project 'some-module' is duplicated in the reactor
顺便说一句,我可以从superegg构建整个项目/没问题。

2 个答案:

答案 0 :(得分:1)

据我所知,你不能在Maven中做到这一点(它是一个构建工具,而不是IDE)。我建议你做以下其中一项:

  1. 在3.1版中使用maven-compiler-plugin。它附带一个增量编译器,如果没有发生任何事情,它将跳过编译。这将大大加快你的工作。
  2. 使用-pl选项仅构建您使用的模块。
  3. http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html http://java.dzone.com/articles/5-maven-tips

    我进一步推荐某种远程桌面或ssh隧道,以便您可以使用Eclipse / IntelliJ / NetBeans。它们提供您所需要的。

答案 1 :(得分:0)

如果您从IntelliJ中加载顶级pom,它将不断为您安装所有模块。即你知道你有一个已经在Maven反应堆中的快照依赖,所以它不会去你的本地存储库。

相关问题