如何定义superpom的路径?

时间:2015-06-14 05:18:56

标签: java maven-3

那里有专家吗?我继承了一个巨大的maven项目,并试图让它编译。没有走得太远。我去了我能找到的最高级别的pom.xml,它位于主目录中,距离主项目一层。然后我发出命令" mvn validate"。收到以下错误:

[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/com/mycompany/neto/vsd/vsd-superpom/1.1.0/vsd-superpom-1.1.0.pom
[INFO] Unable to find resource 'com.mycompany.neto.vsd:vsd-superpom:pom:1.1.0' in repository central (http://repo1.maven.org/maven2)

我注意到一个与主项目处于同一级别的vsd-superpom文件夹,因此我猜测主项目需要指向哪个位置?看看我看到的pom.xml

<parent>
    <groupId>com.mycompany.neto.vsd</groupId>
    <artifactId>vsd-superpom</artifactId>
    <version>1.1.0</version>
</parent>

我在哪里放置vsd-superpom文件夹以便找到它?我不明白它为什么要下载它。我没有在pom.xml中看到任何告诉它这样做的东西。

2 个答案:

答案 0 :(得分:0)

  

Apache Maven有一个解决和分发文件的两级策略,我们将其称为工件。第一级称为本地存储库,它是系统上的工件缓存,默认位于$ {user.home} /.m2 / repository。执行Maven时,它将首先在此本地缓存中查找工件。如果在此处找不到工件,Maven将访问远程存储库以查找工件。一旦找到它,它将被存储到本地存储库中,因此它可用于当前和将来的使用。

请参阅Apache Maven Install Plugin文档

因此,如果您的超级pom独立于项目的其余部分,您只需从super pom文件夹中调用mvn install,以便将其放入本地存储库。这将解决您的问题。

通常顶级项目pom定义项目依赖项,它应该足以调用mvn verify | compile | ...

如果顶级pom依赖于你必须首先安装超级pom的超级pom(或者定义一个包含子模块super pom和项目其余部分的pom)

答案 1 :(得分:0)

我见过(和使用过)的常见项目结构是:

  • FOO-父
    • pom.xml - 我的父级../pom.xml
    • 模块的父POM
  • FOO模块
    • pom.xml - 模块POM与父../foo-parent/pom.xml
  • ......其他模块......
  • pom.xml - 没有父级的多模块POM

现在,如果我想构建 foo-module ,我需要进入顶级文件夹并运行:

mvn -pl foo-module -am package

换句话说,您始终在构建多模块项目。但是,您可以指定您只对某些子模块(-pl)及其依赖项(-am)感兴趣。