Nexus:找不到神器

时间:2013-06-30 09:46:44

标签: maven caching repository nexus

最近我从Archiva迁移到了Sonatype Nexus。

我正在尝试使用第三方存储库中的Jars,而Nexus不会将其缓存到本地存储库中。

我在本节中搜索了答案,而且无法回答这个问题。

这就是我做的......

我正在使用settings.xml:

<settings>
  <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://THE_URL:8080/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <servers>
    <server>
      <id>admin</id>
      <username>user</username>
      <password>password</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>

        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>

      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

</settings>

我还为我正在使用的所有第三方存储库创建了代理存储库,并将其添加到NEXUS PUBLIC GROUP。

接下来,我运行命令:

mvn clean install

并收到以下错误:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building shlang 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://THE_URL:8080/nexus/content/groups/public/com/shadow/shadow/1/shadow-1.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.341s
[INFO] Finished at: Sun Jun 30 11:59:42 IDT 2013
[INFO] Final Memory: 6M/120M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project shlang: Could not resolve dependencies for project com.shadow:shlang:jar:1.0-SNAPSHOT: Failed to collect dependencies for [couchbase:couchbase-client:jar:1.1.5 (compile), com.google.code.gson:gson:pom:2.2.2 (compile), org.json:json:jar:20090211 (compile), net.sf.json-lib:json-lib:jar:jdk15:2.4 (compile), jline:jline:jar:2.10 (compile), commons-validator:commons-validator:jar:1.4.0 (compile), spy:spymemcached:jar:2.8.1 (compile), com.shadow:util:jar:1.0.1 (compile), com.shadow:monkey_schoolyard:jar:1.0.0 (compile)]: Failed to read artifact descriptor for com.shadow:util:jar:1.0.1: Could not find artifact com.shadow:shadow:pom:1 in nexus (http://THE_URL:8080/nexus/content/groups/public) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

本地回购的结果是它不包含任何第三方罐子。

我在这里想念什么?

4 个答案:

答案 0 :(得分:8)

很可能您的本地Maven存储库具有无法缓存组件的事实。您可以强制Maven使用-U标志检查快照版本的更新以及以前未找到的版本是否存在。

所以运行

mvn clean install -U

有时如果事情真的很奇怪,它可以帮助完全删除本地存储库中的相应文件夹结构。所以在你的例子中

rm -rf ~/.m2/repository/com/shadow/

答案 1 :(得分:3)

如果Manfred的解决方案不适合您,那么Nexus会尝试解决该工件问题。

如果你使用浏览器,你可以检查Nexus实际上在做什么来找到你所追求的神器。

使用工件的路径将?describe 附加到Nexus存储库的网址。

E.g。 Nexus Repository Public Repositories URL:http://my.nexus.server.address:8081/nexus/content/groups/public/

获取工件

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>

上述工件的路径为: org / slf4j / slf4j-api / 1.7.5 / slf4j-api-1.7.5.jar

所以要检查的完整网址

  

http://my.nexus.server.address:8081/nexus/content/groups/public/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar?describe

然后,此过程将按照指定存储库的顺序继续执行在公共存储库组下配置的存储库列表,指示存储库无法提供所请求工件的原因。

大多数理由都是不言自明的,可以忽略不计。

可能感兴趣的一个原因是错误仍然缓存,因为找不到存储库的存储库。

这表明在某些时候Nexus试图检索工件而无法找到它。

此状态似乎在Nexus中缓存,因此清除缓存的最快方法是重新启动Nexus

答案 2 :(得分:0)

如果所有其他方法均失败,请确保您的pom和XML标记中不包含不可见的字符(带特殊字符,从mvnrepository.com之类的标准源进行复制,手动重新输入等等)。

我有一个棘手的看不见的角色破坏了我的联系查找(仅从Maven构建中),并且花了很多令人费解的时间调试它,因为我尝试的所有其他方法都工作正常。


这是我的例子(http://www.nousphere.net/cleanspecial.php透露):

<dependency>
    <groupId>uk.co.jemos.podam</groupId>
    <artifactId>podam</artifactId>
    <version>&#8206;7.2.1.RELEASE</version>
    <scope>test</scope>
</dependency>

看到那个垃圾藏在版本的前面吗?

答案 3 :(得分:0)

如果回购链接不起作用或被阻止,请尝试使用镜像。大多数工件都可以在其他镜子上找到。

在本地根目录的“ /.m2/settings.xml”中的nexus-private.hortonworks.com中添加一个镜像(如果使用centOS)。那里有很多Maven镜库,例如

在这种情况下,我建议使用“ https://repo.hortonworks.com/content/repositories/releases/”。将以下内容添加到' /。m2 / settings.xml '

<mirrors>
    <mirror>
        <id>alternate</id>
        <name>alternate to hortonworks</name>
        <mirrorOf>*,!central</mirrorOf>
        <url>https://repo.hortonworks.com/content/repositories/releases/</url>
    </mirror>
</mirrors>

这会将镜像添加到除中心之外的所有存储库。因此中央不会受到影响,并且hortonworks也将被镜像。

此外,如果使用 PROXY ,请不要忘记将其添加到 mvn命令中;使用此

mvn clean install -DproxySet=true -DproxyHost=<your proxy host> -DproxyPort=<port>

在安装Ambari时使用了此功能。希望这能解决:)。