vladfau
vladfau

Reputation: 1003

Configure Maven settings for deployment

I want to deploy artifacts to Nexus from Jenkins to different repositories (like builds-all, builds-verified, releases). The thing is that I want to keep minimal configuration in the project POM file. My settings file now looks like:

<servers>
    <server>
        <id>orion-nexus</id>
        <username>admin</username>
        <password>password</password>
    </server>
</servers>

<localRepository>~/.m2/repository</localRepository>

<profiles>
    <!-- Deployment configuration for CI builds for mainline -->
    <profile>
        <id>build</id>
        <repositories>
            <repository>
                <id>builds-all</id>
                <url>http://orion-nexus:8081/</url>
                <snapshots>
                    <checksumPolicy>fail</checksumPolicy>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

Project POM:

<distributionManagement>
    <repository>
        <id>orion-nexus</id>
        <layout>default</layout>
        <url><!-- how to avoid explicit URL? --></url>
    </repository>
</distributionManagement>

I wan to run deploy like mvn -B -P build clean install deploy. However, I don't understand how to avoid setting explicit URL in distribution management section. Can I set a variable in settings file and propagate it to my POM?

Is there any step-by-step guide for such workflow?

Upvotes: 1

Views: 3275

Answers (1)

Joao Morais
Joao Morais

Reputation: 1925

You can declare a property inside a profile on your settings.xml and use its name within <distributionManagement/> configuration.

settings.xml

<profiles>
    <profile>
        <id>distmgt</id>
        <properties>
            <distUrl>scp://...</distUrl>
        <properties/>
    </profile>
</profiles>

pom.xml

<distributionManagement>
    <repository>
        <id>orion-nexus</id>
        <layout>default</layout>
        <url>${distUrl}</url>
    </repository>
</distributionManagement>

And finally

mvn -P distmgt clean deploy

You can avoid the -P build params using activation.

Upvotes: 4

Related Questions