Reputation: 391
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
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:
${maven-install}/conf/settings.xml
as well as~/.m2/settings.xml
.Decide which one you want and clean up the other.
Upvotes: 3
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
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