10

在我的项目中,有许多依赖项是从其他依赖项中传递包含的,这些依赖项在我们的任何公司存储库中都没有可用的 pom.xml 文件。这些是各个团队支持的内部 jar-only 库,为了方便非 Maven 团队,这些库已上传到存储库中,但不幸的是,这些存储库不是我可以使用的。

对于这些依赖项,Maven 坚持在每次运行构建时尝试从我的每个存储库列表中检索 pom,或者mvn dependency:list. 这意味着 maven 尝试从 7 个不同的存储库位置检索 8 个 pom 文件,并且考虑到这是通过全球企业 WAN 进行的;真的很慢。

例如对于一个特定的依赖

C:\Working\dev\workspace\project>mvn dependency:list
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building project
[INFO]    task-segment: [dependency:list]
[INFO] ------------------------------------------------------------------------
[WARNING] Unable to get resource 'aGroupId:anArtifactId:pom:4.0.14i' from repository inhouse (http://someRepo1/proximity/repository/inhouse): While configuring wagon for 'inhouse': Unable to apply wagon configuration.
Downloading: http://someRepo1/proximity/repository/extFree/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository extFree (http://someRepo1/proximity/repository/extFree)
Downloading: http://someRepo1/proximity/repository/externalNonFree/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository extNonFree (http://someRepo1/proximity/repository/externalNonFree)
Downloading: http://someRepo2/efs/dist/maven/maven2-repository/incr/common/lib/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository efsRepo (http://someRepo2/efs/dist/maven/maven2-repository/incr/common/lib)
Downloading: http://someRepo2/efs/dist/btijava/maven2-repository/incr/common/lib/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository efsBTI (http://someRepo2/efs/dist/btijava/maven2-repository/incr/common/lib)
Downloading: http://someRepo3/maven/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository internal.repo (http://someRepo3/maven)
Downloading: http://repo1.maven.org/maven2/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository central (http://repo1.maven.org/maven2)`
...
etc
...
[INFO] [dependency:list {execution: default-cli}]
[INFO]
[INFO] The following files have been resolved:
... etc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20 seconds
[INFO] Finished at: Tue Jan 26 15:01:48 CST 2010
[INFO] Final Memory: 31M/74M
[INFO] ------------------------------------------------------------------------

另一方面,对于无效的 POM(例如,较旧的 modelVersion 或损坏/无效的 XML),它只会检查我的本地存储库,抱怨它无效然后继续。这很好;至少这不会在 WAN 上再次尝试。

有没有办法(设置、覆盖、存储库配置更改)我可以防止 Maven 的依赖插件/工件解析器反复尝试定位丢失的 POM,如果它已经在本地存储库中有 jar 文件?

规格:Maven 2.2.1(默认 superPOM 插件定义)JDK 1.6.0_18

4

4 回答 4

9

Pascal 的回答对于两个本地构建解决方法是正确的。但是,您最好的选择是要求这些项目的所有者为工件创建 POM。它们不需要很复杂,Maven 在内部使用的简单替代方案将起作用:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>aGroupId</groupId>
  <artifactId>aArtifactId</artifactId>
  <version>4.0.14i</version>
</project>
于 2010-01-27T00:07:38.843 回答
4

下载 POM 确实是 Maven 中支持传递依赖项的核心概念(实际上,依赖项不仅仅是一个 JAR,请参阅3.5.5. Maven's Dependency Management以获取详细信息),所以我不知道您是否可以阻止它。

当然,正确的做法是解决问题的根本原因。但是如果你不能,也许你可以在离线模式下运行你的构建(使用-o选项)。或者,也许您可​​以使用可选参数在本地存储库中“安装”工件,install:install-file并指示插件使用可选参数为它们生成 pom generatePom(但这显然不能很好地“扩展”)。

于 2010-01-26T07:53:19.410 回答
2

设置一个 Nexus 存储库(或类似的)并在那里上传工件。Nexus 会自动为您上传的工件创建基本的 pom。

于 2010-07-14T17:36:04.340 回答
-1
  • 下载到本地仓库
  • 设置连接并上传
  • 离线办公

也许最好的办法就是一路摆脱 maven,太恐怖了!

于 2010-11-12T23:45:46.960 回答