Mahdi
Mahdi

Reputation: 1189

Artifactory Maven example fails with 401 error code

I'm trying Artifactory on my localhost. Even though I've followed their tutorial to do their Maven example, I fail with 401 status code. Here is the error I get:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project multi: Failed to deploy artifacts: Could not transfer artifact org.jfrog.test:multi:pom:3.7-20190117.083916-1 from/to snapshots (http://localhost:8081/artifactory/libs-snapshot-local): Failed to transfer file http://localhost:8081/artifactory/libs-snapshot-local/org/jfrog/test/multi/3.7-SNAPSHOT/multi-3.7-20190117.083916-1.pom with status code 401 -> [Help 1]

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project multi: Failed to deploy artifacts: Could not transfer artifact org.jfrog.test:multi:pom:3.7-20190117.083916-1 from/to snapshots (http://localhost:8081/artifactory/libs-snapshot-local): Failed to transfer file http://localhost:8081/artifactory/libs-snapshot-local/org/jfrog/test/multi/3.7-SNAPSHOT/multi-3.7-20190117.083916-1.pom with status code 401

Here is content of settings.xml located in /Users/my_user_name/.m2:

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <servers>
    <server>
      <username>${security.getCurrentUsername()}</username>
      <password>${security.getEscapedEncryptedPassword()!"AP84FzVbdvwcgreF8m9HT77ESkA"}</password>
      <id>central</id>
    </server>
    <server>
      <username>${security.getCurrentUsername()}</username>
      <password>${security.getEscapedEncryptedPassword()!"AP84FzVbdvwcgreF8m9HT77ESkA"}</password>
      <id>snapshots</id>
    </server>
  </servers>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://localhost:8081/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://localhost:8081/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://localhost:8081/artifactory/libs-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://localhost:8081/artifactory/libs-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

And I've added this to pom.xml

<distributionManagement>
    <snapshotRepository>
        <id>snapshots</id>
        <name>0e5e20a55438-snapshots</name>
        <url>http://localhost:8081/artifactory/libs-snapshot-local</url>
    </snapshotRepository>
</distributionManagement>

Error code 401 hints me authentication issue. I'm wondering how does settings.xml resolve credentials, e.g. ${security.getCurrentUsername()}? I even put plain username and password in the settings.xml ,but still it failed.

Can you please tell me what's wrong in my settings and how can I fix this issue?

Upvotes: 2

Views: 5241

Answers (2)

theINtoy
theINtoy

Reputation: 3668

For those of you who have landed here and are getting a 401 when trying to use artefactory cloud, for me the issue was I added a the public mirrors section (this wasn't added by the Generate Maven Settings link:

Artefactory Set Me Up Dialog

This gave me a section in the settings.xml of:

  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>public</name>
      <url>https://{my-domain}.jfrog.io/artifactory/public</url>
      <id>public</id>
    </mirror>
  </mirrors

As I was therefore using this mirror I needed to add in further authentication in to the servers section:

       <server>
          <username>{username}</username>
          <password>{encrypted password}</password>
          <id>public</id>
      </server

Upvotes: 0

guido
guido

Reputation: 19194

NOTE: there is a bug in artifactory 6.5.x, which was resolved in version 6.5.2, that prevents filtered resource to be correctly processed.

${security.getCurrentUsername()} is an usage of a filtered resource, which in artifactory allows to treat text files as filtered via FreeMarker templates.

When you download the settings.xml file in the artifactory UI, the ${security.[]} fields would have been replaced with your currently logged username and encrypted password (if that bug was not present). Because of the bug, or if you copy/paste the text content instead of downloading, the settings.xml will contain those literal unreplaced strings, and maven would not replace them because they do not exist in the maven build context.

As shown in the video you linked, you need to click the download snippet link, instead of copying the text; otherwise, you can copy/paste the text and then you need to type your artifactory username and password in it.

Upvotes: 5

Related Questions