Eyal Azran
Eyal Azran

Reputation: 391

Setting a single server credentials in Maven for multiple repositories

Can I have multiple repositories in Maven settings.xml with a single server credentials?

We're using Maven 3.0.4 to deploy artifacts to Nexus pro version 2.2.1

We have multiple repositories on the same server, and a user uses the same credentials to access all these repositories.

The settings.xml multiple repositories with the same credentials:

<repositories>
<repository>
   <id>Staging-group</id>
   <url>http://server/nexus/content/groups/Staging-group</url>
<repository>
   <id>RELEASES</id>
   <url>http://server/nexus/content/repositories/RELEASES</url>
</repository>
<repository>
   <id>INTERNALS</id>
   <url>http://server/nexus/content/repositories/INTERNALS</url>
</repository>
<repository>
   <id>SNAPSHOTS</id>
   <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>
</repositories>
.....
<servers>
<server>
   <id>Staging-group</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>RELEASES</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>SNAPSHOTS</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>INTERNALS</id>
   <username>user</username>
   <password>password</password>
</server>
</servers>

Nexus uses Active Directory authentication. So every time a user changes his or her Windows password, they need to change all four entries in the settings.xml file

Is there a way to declare the credentials once for all the repositories?

Thanks, Eyal

Upvotes: 20

Views: 24545

Answers (3)

user3366644
user3366644

Reputation: 81

Regarding the WARNING

profiles.profile[development].repositories.repository.id must be unique, ...

I found this to be two settings.xml files being found:

  • One in a maven installation's ${maven-install}/conf/settings.xml as well as
  • one in ~/.m2/settings.xml.

Decide which one you want and clean up the other.

Upvotes: 3

Slawomir Jaranowski
Slawomir Jaranowski

Reputation: 8497

Because each repository definition should have unique id - and id must be connected with server section so it is not way to have one server for many repositories.

Trying put username and password in properties also have no expected result because properties in defined in setting.xml are not resolved in the same settings.xml

But we can define environment variables with user name and password and use it in settings.xml

So we can have in settings.xml:

<server>
   <id>Staging-group</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>
<server>
   <id>RELEASES</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>
<server>
   <id>SNAPSHOTS</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>

Now we must define somewhere used environment variables, we can use for it ~/.mavenrc so this variables will be available only for maven.

example of ~/.mavenrc

export MVN_USER=user
export MVN_PASS=pass

This workaround give us possibility to have defined username and password for many repositories in one place.

Testing with maven 3.6.3

Upvotes: 4

John Ament
John Ament

Reputation: 11723

Yes, at least I believe this should work.

Instead of

<repository>
   <id>SNAPSHOTS</id>
   <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>

Use

<repository>
  <id>nexus</id>
  <name>SNAPSHOTS</name>
  <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>

Then just reference nexus as your server id.

Upvotes: 10

Related Questions