Maven回购不起作用

时间:2014-08-08 09:44:40

标签: java spring maven

我正在尝试添加maven存储库mvnrepository.com,但似乎我没有这样做。

<repository>
    <id>mvnrepository</id>
    <url>http://mvnrepository.com/artifact/</url>         
</repository>

我可以清楚地看到我正在寻找的神器是http://mvnrepository.com/artifact/org.springframework.ldap/spring-ldap/1.3.1.RELEASE

但是我的maven构建输出报告我它不是

  

下载:   http://mvnrepository.com/artifact//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   mvnrepository(http://mvnrepository.com/artifact/

我做错了什么?如何下载spring ldap artifact?

更新 我尝试了几种工件,但都失败了

  

下载:   http://repo1.maven.org/maven2//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   maven central repo(http://repo1.maven.org/maven2/)正在下载:   http://download.java.net/maven/2//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   java.net repo(http://download.java.net/maven/2/)正在下载:   http://maven.springframework.org/external//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   外部弹簧(http://maven.springframework.org/external/)   下载:   http://search.maven.org//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   repo.jenkins-ci.org(http://search.maven.org/)正在下载:   https://repository.jboss.org//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   mvnrepository(https://repository.jboss.org/)正在下载:   http://repo1.maven.org/maven2//org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   中心(http://repo1.maven.org/maven2/

如果我没有在settings.xml中定义任何存储库,那么响应如下:

  

下载:   http://repo1.maven.org/maven2/org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar   [INFO]无法找到资源   &#39; org.springframework.ldap:弹簧LDAP:罐:1.3.1.RELEASE&#39;在存储库中   中心(http://repo1.maven.org/maven2

更新 此外,我在其他项目中使用gradle,这无缝地工作

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    compile 'org.springframework.ldap:spring-ldap:1.3.1.RELEASE'
}

所以我很确定有一些maven repo我不知道

3 个答案:

答案 0 :(得分:2)

spring-ldap工件是pom类型。要指定jar以外的任何工件,您需要指定类型。因此,您需要在pom中指定的工件是

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap</artifactId>
    <version>1.3.1.RELEASE</version>
    <type>pom</type>
</dependency>

希望这有帮助

答案 1 :(得分:1)

正如@techbost所提到的,maven无法从任何存储库中解析spring-ldap-1.3.1.RELEASE.jar,因为这样的jar不存在。

让我们看看发生了什么。您可以通过以下方式定义依赖关系:

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap</artifactId>
    <version>1.3.1.RELEASE</version>
</dependency>

如果您未指定type标记,则默认类型为jar。这意味着Maven尝试点击此URL来获取文件: http://repo1.maven.org/maven2/org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.jar

如您所见,此文件不存在。那是因为spring-ldap模块没有jar,它是一个pom打包模块,这意味着它只有pom文件,它有子模块的通用配置和那些子模块的定义子模块。

接下来,您可能希望将类型定义为pom

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap</artifactId>
    <version>1.3.1.RELEASE</version>
    <type>pom</type>
</dependency>

有人可能认为这应该有用,因为现在你指示maven下载一个存在的pom文件: http://repo1.maven.org/maven2/org/springframework/ldap/spring-ldap/1.3.1.RELEASE/spring-ldap-1.3.1.RELEASE.pom

嗯,它也不会起作用。那是因为pom工件不是真正的依赖项(仅用于提醒 - 依赖项是添加到类路径以进行编译,测试和打包的文件,因此在类路径中有一个pom文件是没有意义的)

你真正需要的是两者之一:

  • 使用spring-ldap的特定子模块,例如: spring-ldap-core
  • 使用all模块的spring-ldap分类。在这种情况下,您将在一个jar中携带所有模块。虽然它可能会简化您的配置,但它强烈反对粒子。

在前一种情况下,您的依赖声明将如下所示:

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap-core</artifactId>
    <version>1.3.1.RELEASE</version>
</dependency>

这很有效。

在后一种情况下,您的依赖声明将如下:

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap</artifactId>
    <version>1.3.1.RELEASE</version>
    <classifier>all</classifier>
</dependency>

虽然这是一个非常糟糕的主意,但这也有效。

P.S。 mvnrepository site不是真正的 maven存储库。它是在maven-central中搜索和浏览工件的网站,当maven central没有搜索时可以使用。

我建议的两个存储库是:

  1. jcenter - Maven Central的超集,默认情况下为https,发布商的网络标识,更丰富的用户界面等。有关详细信息,请参阅https://bintray.com/bintray/jcenterSet me up按钮将为您提供相关说明如何与Maven一起使用)
  2. Maven Central over https - here是Maven设置说明。

答案 2 :(得分:0)

我认为您不需要添加任何额外的存储库标记来获取spring-ldap工件。

您只需要在工件不属于默认maven存储库时指定存储库,例如Jboss存储库https://repository.jboss.org/,您需要在pom中添加它以获取此存储库的任何工件。 / p>

你简单地在你的pom中添加以下依赖项,它应该可以工作。

<dependency>
    <groupId>org.springframework.ldap</groupId>
    <artifactId>spring-ldap</artifactId>
    <version>1.3.1.RELEASE</version>
</dependency>

在没有指定存储库的情况下下载工件有任何问题吗?