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.

Затем я запустил команду:

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

Результат локального репо заключается в том, что он не содержит ни одной из сторонних банок, которые он должен.

Что мне здесь не хватает?

Ответ 1

Скорее всего, ваш локальный репозиторий Maven имеет тот факт, что компонент не может быть найден кэшированным. Вы можете заставить Maven проверить обновления версий моментальных снимков и наличие ранее не найденной версии с флагом -U.

Итак, запустите

mvn clean install -U

Иногда, если это действительно странно, это может помочь полностью удалить соответствующую структуру папок в вашем локальном репозитории. Итак, в вашем примере

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

Ответ 2

Если решение Manfred не работает для вас, проблема будет в том, что Nexus пытается разрешить артефакт.

Если вы используете браузер, вы можете проверить, что делает Nexus, чтобы найти артефакт, который вы используете.

Добавить описать в URL-адрес репозитория Nexus с помощью пути к артефакту.

например. URL-адрес репозитория Nexus Repository: 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

Итак, полный URL-адрес для проверки

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.

Ответ 3

Если ничего не помогает, убедитесь, что ваши теги pom и XML очищены от невидимых символов (удалите специальные символы, скопируйте из стандартного источника, такого как mvnrepository.com, повторите ввод вручную и т.д.).

У меня был хитрый невидимый персонаж, портящий поиск в Nexus (только из сборки 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>

Видишь этот хлам, скрывающийся перед версией?

Ответ 4

Если ссылка репо не работает или заблокирована, попробуйте зеркала. Большинство артефактов доступны на других зеркалах.

Добавьте зеркало к nexus-private.hortonworks.com в "/.m2/settings.xml" в локальном корневом каталоге (в случае 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, работал. Надеюсь, это решит :).