如何定义 superpom 的路径?
how to define path to superpom?
那里有专家吗?我继承了一个巨大的 Maven 项目,并试图让它编译。不会走得太远。我转到我能找到的最高级别 pom.xml,位于 trunk 目录中,比主项目低一级。然后我发出命令 "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 中没有看到任何告诉它这样做的内容。
Apache Maven has a two level strategy to resolve and distribute files, which we call artifacts. The first level is called the local repository, which is the artifact cache on your system, by default located at ${user.home}/.m2/repository. When executing Maven, it'll first look in this local cache for artifacts. If the artifact cannot be found here, Maven will access the remote repositories to find the artifact. Once found it will be stored into the local repository, so it's be available for current and future usage.
查看Apache Maven Install Plugin文档
因此,如果您的 super pom 独立于项目的其余部分,您只需从 super pom 文件夹中调用 mvn install
,这样它就会被放置到您的本地存储库中。那将解决您的问题。
通常顶层项目pom定义了项目依赖,应该足够调用mvn verify | compile | ...
如果顶级 pom 依赖于您必须首先安装超级 pom 的超级 pom(或定义一个包含子模块超级 pom 和项目其余部分的 pom)
我看到(和使用)的常见项目结构是:
- foo-parent
pom.xml
- 父模块的父 POM ../pom.xml
- foo-模块
pom.xml
- 父模块 POM ../foo-parent/pom.xml
- ...其他模块...
pom.xml
- 没有父级的多模块 POM
现在如果我想构建 foo-module 我需要在顶级文件夹中并且 运行:
mvn -pl foo-module -am package
换句话说,您始终在构建多模块项目。但是,您可以指定您只对某些子模块 (-pl
) 及其依赖项 (-am
) 感兴趣。
那里有专家吗?我继承了一个巨大的 Maven 项目,并试图让它编译。不会走得太远。我转到我能找到的最高级别 pom.xml,位于 trunk 目录中,比主项目低一级。然后我发出命令 "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 中没有看到任何告诉它这样做的内容。
Apache Maven has a two level strategy to resolve and distribute files, which we call artifacts. The first level is called the local repository, which is the artifact cache on your system, by default located at ${user.home}/.m2/repository. When executing Maven, it'll first look in this local cache for artifacts. If the artifact cannot be found here, Maven will access the remote repositories to find the artifact. Once found it will be stored into the local repository, so it's be available for current and future usage.
查看Apache Maven Install Plugin文档
因此,如果您的 super pom 独立于项目的其余部分,您只需从 super pom 文件夹中调用 mvn install
,这样它就会被放置到您的本地存储库中。那将解决您的问题。
通常顶层项目pom定义了项目依赖,应该足够调用mvn verify | compile | ...
如果顶级 pom 依赖于您必须首先安装超级 pom 的超级 pom(或定义一个包含子模块超级 pom 和项目其余部分的 pom)
我看到(和使用)的常见项目结构是:
- foo-parent
pom.xml
- 父模块的父 POM../pom.xml
- foo-模块
pom.xml
- 父模块 POM../foo-parent/pom.xml
- ...其他模块...
pom.xml
- 没有父级的多模块 POM
现在如果我想构建 foo-module 我需要在顶级文件夹中并且 运行:
mvn -pl foo-module -am package
换句话说,您始终在构建多模块项目。但是,您可以指定您只对某些子模块 (-pl
) 及其依赖项 (-am
) 感兴趣。