I am getting 401 error while deploying in nexus. I does not make any changes to the installed nexus. Nexus is running on localhost:8080/nexus
and i am able to login with default user/password. When i am running mvn deploy
i am getting this error.
Here is my POM.
<groupId>testproject</groupId>
<artifactId>testproject</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>testproject</name>
<url>http://maven.apache.org</url>
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8080/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8080/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
<dependencies>
.........
</dependencies>
and ~/.m2/settings.xml
<servers>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
Exception:
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default- deploy) on project testproject: Failed to deploy artifacts: Could not transfer artifact testproject:testproject:jar:1.0-20131213.150615-1 from/to snapshots (http://localhost:8080/nexus/content/repositories/snapshots): Failed to transfer file: http://localhost:8080/nexus/content/repositories/snapshots/testproject/testproject/1.0-SNAPSHOT/testproject-1.0-20131213.150615-1.jar.
Return code is: 401 -> [Help 1]
Please help me.
asked Dec 13, 2013 at 15:24
GangarajuGangaraju
4,3289 gold badges45 silver badges77 bronze badges
2
It’s working now. Need to edit ${MVN_HOME}/conf/settings.xml
instead of /home/{user}/.m2/settings.xml
answered Dec 15, 2013 at 10:33
GangarajuGangaraju
4,3289 gold badges45 silver badges77 bronze badges
5
HTTP 401 is the status code for «unauthorized», which implies that your deployment
user isn’t authorized to upload artifacts to that particular repository in Nexus. Log in to Nexus and give the deployment
user the role(s) required to to change that snapshot repo.
answered Dec 15, 2013 at 0:04
0
I was missing the
<servers>
tag on my.m2/settings.xml
on
Gitlab-ci + MAVEN + Jfrog Artifactory:
My gitlab-ci.yxml
Artifactory_deploy:
stage: install
only:
- desarrollo
script:
- echo "Deploying to Artifactory"
- cd $CLONE_DIR
- mvn -X deploy
My .m2/settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<username>${ARTIFACTORY_USER}</username>
<password>${ARTIFACTORY_PASSWORD}</password>
<id>central</id>
</server>
<server>
<username>${ARTIFACTORY_USER}</username>
<password>${ARTIFACTORY_PASSWORD}</password>
<id>snapshots</id>
</server>
</servers>
<profiles>
<profile>
<id>develop</id>
<properties>
<artifactory.ip>${ARTIFACTORY_IP}</artifactory.ip>
<artifactory.port>${ARTIFACTORY_PORT}</artifactory.port>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<username>admin</username>
<password>THISWASMYENCRYPTEDPASSWORD</password>
<url>http://${ARTIFACTORY_IP}:${ARTIFACTORY_PORT}/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<username>admin</username>
<password>THISWASMYENCRYPTEDPASSWORD</password>
<url>http://${ARTIFACTORY_IP}:${ARTIFACTORY_PORT}/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<username>admin</username>
<password>password</password>
<url>http://${ARTIFACTORY_IP}:${ARTIFACTORY_PORT}/artifactory/libs-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<username>admin</username>
<password>password</password>
<url>http://${ARTIFACTORY_IP}:${ARTIFACTORY_PORT}/artifactory/libs-snapshot</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>develop</activeProfile>
</activeProfiles>
</settings>
<servers>
<server>
<id>snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
answered May 3, 2018 at 10:42
The user that you use for snapshot deployments needs a role with these privileges:
- nx-repository-view-maven2-maven-snapshots-read
- nx-repository-view-maven2-maven-snapshots-edit
- nx-repository-view-maven2-maven-snapshots-add
answered May 16, 2019 at 13:58
OSGI JavaOSGI Java
4656 silver badges19 bronze badges
Sonatype helps open source projects by providing free Maven repository hosting and Maven central repository sync. There are hundreds of projects using this great service. As a result, I’ve received many questions from users, and a large amount of them is about ‘401’. It is sometimes the case that when people try to deploy artifacts into Nexus using Maven, the deployment fails and they receive a 401 error.
The general definition of ‘401’ can be bound at the HTTP RFC. Briefly speaking, a ‘401’ error occurs when the server asks for user authentication but the client can not provide it. In Nexus, this means the Nexus server asks you log in first before doing things like deploying artifacts. So when you get a 401 on deploying artifacts to Nexus, you need to make sure you provide correct credentials.
Here is a check list you can follow:
- Make sure your username/password is correct by logging into the Nexus UI. If curl is installed on your machine, you can try deploying an artifact with a command like this:
curl -u juven-test:****** https://oss.sonatype.org/service/local/staging/deploy/maven2/com/ juvenxu/ossrh-test/1.1/ossrh-test-1.1.pom —request PUT —data @pom.xml
- If there is no error output, ensure your user privileges are correctly configured on the server. Make sure to drop the repo you just created.
- Make sure you have configured a server in settings.xml and that the server id is identical to the distribution repository id in pom.xml. For example, this:
sonatype-nexus-staging
Nexus Staging Repository
https://oss.sonatype.org/service/local/staging/deploy/maven2/
requires
<settings> … <servers> <server> <id>sonatype-nexus-staging</id> <username>your-jira-id</username> <password>your-jira-pwd</password></server> </servers> … </settings>
- Make sure your settings.xml is in the correct place (normally it’s _~/.m2/settings.xml). You can check this by running mvn help:effective-settings.
- If the server is using https but the URL in your POM is http, you might get 401 as well.
- Use the latest version of Maven, as there is a known issue regarding 401: MNG-4469
Из-за развертывания среды школьных экзаменов я освоил короткий период взаимосвязи. Фактически, это неотделимо от изучения maven. В то время я столкнулся с множеством проблем, больших и малых. Сегодня проблема молодого учителя все еще заставляет меня задуматься. :
Причины одной и той же проблемы могут быть очень разными, но основная причина одна и та же. Раньше она не регистрировалась, и ее правила не очень хороши. Сегодня мы в основном записываем две проблемы 503 и 401:
503: Невозможно подключиться к услуге
Анализ:
1. Если служба не подключена, проще всего подумать о том, включена ли служба или нет. Самый простой способ — получить к ней доступ. Если вы можете получить к ней доступ, нет проблем. Если вы не можете, вам нужно сделать две вещи. Вещи:
1) Проверьте брандмауэр (для Linux, пожалуйста, Baidu для Windows)
firewall-cmd --state #Check firewall
service firewalld stop # Выключите брандмауэр
2) Проверить сервис nexus
ps -ef |grep nexus # Проверьте, включена ли служба
/usr/local/nexus/bin/nginx start #Open nexus service
2. Проверьте, правильно ли работает веб-терминал nexus (это также проблема, обнаруженная сегодня)
В Интернете вы можете увидеть, что статус этого хранилища больше не предоставляет услуги. Как правило, эта проблема возникает редко или может не использоваться в то время, а затем использоваться снова и забывать изменить статус В этом случае безопаснее всего нажать на адрес, стоящий за этим состоянием.Если появляется следующая картинка, это доказывает, что проблема связана с самим складом.
3. Если существует конфликт IP-адресов, он относится к сетевому уровню. Если две вышеуказанные ситуации действительно исключены, это также необходимо проверить. Это предложение от пользователей сети. Это действительно сложно придумать, если вы не сталкивались с этим раньше
4. Определите, находятся ли посетитель и нексус в локальной сети или есть внешняя сеть, которую можно использовать напрямую. Я помню, что у меня есть коллега. Компания, в которой он работает, имеет две локальные сети. Интеркоммуникация должна применяться. На тот момент это был взаимный пинг. Короче говоря, конкретная проблема была проанализирована подробно, и главное не напортачить. Для первого типа ищите причину в этом отношении.
401: нет прохода
Он может отсутствовать, или он может быть, но не перенесен, или он может быть небрежным и неправильным
Анализ:
Для этого слишком много причин, позвольте мне рассказать о том, с чем я столкнулся
1. Настроенные поля несовместимы с веб-частью, в адресе слишком много слов, но не слов, или серверный склад неполный, или активный узел в нескольких средах неправильный, опубликуйте правильную конфигурацию для справки (Меры предосторожности при настройке в этом разделе см. Ниже в разделе конфигурации)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<! - Установить путь к локальному складу ->
<localRepository>G:mavenrepo</localRepository>
<! - Задайте имя пользователя и пароль при публикации пакета jar ->
<servers>
<server>
<id>dynamic-public</id>
<username>имя пользователя</username>
<password>пароль</password>
</server>
<server>
<id>dynamic-releases</id>
<username>имя пользователя</username>
<password>пароль</password>
</server>
<server>
<id>dynamic-snapshots</id>
<username>имя пользователя</username>
<password>пароль</password>
</server>
<server>
<id>thirdparty</id>
<username>имя пользователя</username>
<password>пароль</password>
</server>
</servers>
<! - Задайте путь к центральному и т. Д., Охватывающий центральную конфигурацию в конструкторе модулей maven ->
<profiles>
<profile>
<id>central</id>
<repositories>
<repository>
<id>central</id>
<name>Central</name>
<url>Собственный адрес</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central</name>
<url>Собственный адрес</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>central</activeProfile>
</activeProfiles>
</settings>
Описание:
сервер соответствует складу в нексусе. Какие склады необходимо извлечь, какие склады здесь настроены. Идентификатор должен совпадать с идентификатором склада. Если используется группа, также конфигурация группы здесь
профили означают узлы, потому что набор сред может быть развернут на разных виртуальных машинах. В настоящее время адреса разные, поэтому мы можем настроить несколько профилей, а идентификатор можно назвать как угодно , Но следует отметить, что мы будем использовать только один профиль каждый раз, какой из них использовать, определяется тегом activeProfiles, что также является важностью идентификатора
В профиле может быть несколько профилей, и каждый профиль соответствует адресу склада, но я использовал группу, поэтому нужно настроить только один. Если группа не используется, вам нужно Настроить несколько профилей для нескольких серверов
Прикрепите конфигурацию pom файла
<distributionManagement> <! - Информация об управлении удаленным развертыванием ->
<repository> <! - Информация, необходимая для развертывания компонентов, созданных проектом, на удаленном складе ->
<id>Название собственного склада</id>
<name>Nexus Release Repository</name>
<url>Собственный адрес</url>
</repository>
<snapshotRepository> <! - Где развернут моментальный снимок компонента? Если этот элемент не настроен, он будет развернут в репозитории, настроенном элементом репозитория по умолчанию ->
<id>Название собственного склада</id>
<name>Nexus Snapshot Repository</name>
<url>Собственный адрес</url>
</snapshotRepository>
</distributionManagement>
Еще одна вещь, обычно конфигурация в настройках заключается в том, чтобы вытащить пакет jar, а конфигурация в pom — depoly, но при развертывании он будет скомпилирован и упакован. В это время, если требуемый пакет jar недоступен локально, jar также извлекается. Операции
2. В принципе, это можно решить после первого шага, но недавно я узнал причину приоритета файла настройки.
pom.xml> пользователь устанавливает (.m2setting)> globalsetting (распаковывается maven)
Как правило, мы будем использовать IDE для компиляции.Как правило, мы настраиваем путь maven в настройках и используем его напрямую, и проблем не будет, как показано на рисунке.
Но если мы работаем из каталога файлов, как показано на рисунке, путь доступа к настройкам в это время — pom.xml, настройки в .m2, globalsettings, поиск в этом порядке и остановка при обнаружении
В настоящее время, если файл настроек в .m2 не удален или по умолчанию используется доступ к частному серверу, созданному вами, он может сообщать 401. Это не потому, что есть проблема с предыдущей конфигурацией, а потому, что настроенный вами файл настроек недоступен вообще. Определите, какой файл конфигурации использовать
mvn help:effective-settings
После запуска мы можем увидеть, какой файл настроек в настоящее время действует. Если он находится в формате .m2, или удалите этот файл напрямую, или настройте полную конфигурацию для этого файла, если он все еще не работает Посмотрите на третий шаг
3. Это наименьшая вероятность, то есть может быть введен неверный пароль или не используется имя пользователя с правами администратора, это может подтвердить лицо, отвечающее за частный сервер.
подводить итоги:
У этих двух кодов ошибок очень много причин. Я надеюсь, что у блоггеров есть другие причины для общения в комментариях.
Solution 1
I had similar issue. I resolved it by adding _auth
into my ~/.npmrc
. See the doc how to encode your nexus credential. I added the encoded credential using npm config set _auth xxx
.
You wont be able to see the value using npm config list
or npm config get _auth
.
Solution 2
what worked for me is :
I deleted the .npmrc file under C/users/ folder.
and ran npx vsts-npm-auth -config .npmrc command to create a new file in the users folder
Solution 3
I found a way out. With this new npm version they are enforcing authentication to access certain packages. We realised we don’t need to use authentication for any of the packages we were downloading, hence the auth code we had was unnecessary. So we just removed it and it all worked.
Solution 4
What worked for me was running npm login
, then entering my Username, Password, and Email to log in to the registry defined in .npmrc
. I then proceeded with npm installing the packages I needed and it worked.
Solution 5
In my case, the problem was I’ve entered another registry address in same Nexus for npm login
command.
npm login --registry=http://nexus_url:port/repository/wrong_address
My problem was solved by logging into correct address:
npm login --registry=http://nexus_url:port/repository/correct_address
Comments
-
I upgraded node version to 12.16.2 and npm version to 6.14.4. After that I am not able to run
npm install
, as I’m getting this errorcode E401 npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"
I even tried deleting node_modules and package-lock.json and running npm install again, but doesn’t change anything.