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>‎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, работал. Надеюсь, это решит :).