14

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

我正在尝试使用来自 3rd 方存储库的 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>

我还为我正在使用的所有第 3 方存储库创建了代理存储库,并将它们添加到 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

本地 repo 中的结果是它不包含它应该包含的任何 3rd 方 jar。

我在这里想念什么?

4

4 回答 4

10

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

所以运行

mvn clean install -U

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

rm -rf ~/.m2/repository/com/shadow/
于 2014-10-01T16:03:46.197 回答
7

如果 Manfred 的解决方案对您不起作用,那么问题将在于 Nexus 尝试解决工件。

如果您使用浏览器,您可以检查 Nexus 实际在做什么来定位您所追求的工件。

将?describe附加到带有工件路径的 Nexus 存储库的 url。

例如 Nexus 存储库公共存储库 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

于 2015-03-30T23:20:53.707 回答
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>

看到隐藏在版本前面的垃圾了吗?

于 2019-01-03T18:02:30.870 回答
0

如果 repo 链接不起作用或被阻止,请尝试镜像。大多数工件在其他镜像上可用。

在本地根目录的“/.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 安装时使用它,工作正常。希望这能解决:)。

于 2019-09-06T08:57:57.077 回答