如何将 maven 1 存储库与 maven 2 一起使用?

Posted

技术标签:

【中文标题】如何将 maven 1 存储库与 maven 2 一起使用?【英文标题】:How to use a maven 1 repository with maven 2? 【发布时间】:2011-08-25 18:30:02 【问题描述】:

我在构建我的项目(使用 maven 2)时遇到问题,该项目引用了 maven 1 存储库中的一些 jar。

场景:我的公司有一个私有 maven 1 存储库,其中包含以下信息:

<url>http://my-company-maven1-repo/maven-repository<url>

它的布局是:

   maven-repository
              |_repository
                     |_ ....
                     |_ ....
                     |_vectorgraphics
                              |_jars
                                  |_freehep_swing-2.0.3.jar
                                  |_freehep_io-2.0.2.jar

我尝试过的: 1.按照这里的指南:relevant maven official docs 我的 mvn2 pom.xml:

<repository>
  <snapshots>
    <enabled>true</enabled>
  </snapshots>
  <id>my-repo</id>        <-- I made up a temporary id/name
  <name>my_repo></name>
  <url>http://my-company-maven1-repo/maven-repository<url>
  <layout>
<repository>
<dependencies>
  <dependency>
    <groupId>vectorgraphics</groupId>
    <artifactId>freehep-swing</artifactId>
    <version>2.0.3</version>
    <scope>jar</scope>
  </dependency>
</dependencies>

结果很奇怪,我公司的 maven1 存储库被完全忽略。相反,mvn2 尝试从“maven2 central”下载 jar:

Downloading http://repo1.maven.org/maven2/vectorgraphics/freehep-swing/2.0.3/freehep-swing-2.0.3.pom 

结果 freehep-swing-2.0.3.pom(在我的本地 .m2/repository/ 中)有以下错误:

legacy-http\://my-company-maven1-repo/maven-repository/.lastUpdated=1305430120039
http\://my-company-maven1-repo/maven-repository/.error=Could not transfer artifact vectorgraphics\:freehep-swing\:pom\:2.0.3 from/to my-repo (http\://my-company-maven1-repo/maven-repository)\: No connector available to access repository my-repo (http\://my-company-maven1-repo/maven-repository) of type legacy using the available factories AsyncRepositoryConnectorFactory, WagonRepositoryConnectorFactory
http\://repo1.maven.org/maven2/.error=
http\://repo1.maven.org/maven2/.lastUpdated=1305430120281

如果有人可以向我指出如何从 maven1 存储库中获取 freehep_swing-2.0.3.jar(布局如上所示),我将不胜感激。

谢谢,

【问题讨论】:

【参考方案1】:

Nexus repository manager 能够为 Maven 2,3 客户端代理 Maven 1 存储库。

Maven 3 不再有可能使用“遗留”存储库,请参阅Maven 3.x compatibility notes。

【讨论】:

感谢您的回答。但是,仅通过修改我的 mvn2 项目的 pom.xml 就无法实现我想要做的事情吗?我认为 Nexus 仅在“相反情况”中才需要,因为“没有办法让 Maven 1 识别 Maven 2 存储库”[disasterarea.co.uk/blog/?p=196]。考虑到那个博客和 [maven.apache.org/guides/mini/guide-using-m1-repos-with-m2.html] 都说什么,我认为这只是对 pom.xml 的一些操作,一切都会好起来的。请告诉我。 我相信您使用的是 Maven 3,它不再支持“旧版”布局。如果是这种情况,您必须使用存储库管理器。详情请见cwiki.apache.org/MAVEN/…。 如果存储库布局 RemoteRepository.getContentType() 不是 "default",WagonRepositoryConnector 的构造函数将引发异常。

以上是关于如何将 maven 1 存储库与 maven 2 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Nexus 原始存储库与 Maven 存储库

Android 将 github 库与 maven 一起使用是不是安全

如何将 ivy 本地存储库用作 maven 存储库

如何使用 Netbeans 嵌入式 Maven 将模块安装到 maven 存储库中?

Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库

如何从 Maven 存储库中找到最新版本的工件