How to make maven use credentials when executing dependency plugin from command line

Pawel Veselov picture Pawel Veselov · Nov 20, 2018 · Viewed 8.3k times · Source

I have a private Maven repository. It's defined in pom.xml of the project

    <repository>
        <id>some.id</id>
        <url>https://some.host/artifactory/some.id</url>
    </repository>

In my ~/.m2/settings.xml, I have proper authentication block:

    <server>
        <id>some.id</id>
        <username>[email protected]</username>
        <password>{some-fancy-password-hash-goes-here}</password>
    </server>

When building the project, Maven is able to access the repository without any problems, as it's supposed to be. In debugging output, I can see it applying the credentials.

But when I try to download an artifact directly, it doesn't look like Maven is even considering the settings file.

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \
  -DremoteRepositories=some.id::::https://some.host/artifactory/some.id \
  -Dartifact=groupId:artifactId:1.1.1

The username is not transmitted. I can see in the debug output, that the BasicRepositoryConnector is invoked without username/password combination.

So the question goes - can a plugin be invoked so that whatever process makes Maven consider using the authentication stated in its settings file is executed?

Answer

Revive picture Revive · Nov 20, 2018

It doesn't look like the plugin is using the saved credentials when remoteRepositories property is used. Testing using repositoryId instead worked as expected for me.

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get -DrepositoryId=some.id -Dartifact=groupId:artifactId:1.1.1

The effective pom must contain repository and url for the repo. If you plan to run this in an empty directory without any pom.xml then your repository definition will need to be moved to settings.xml