Maven Central skip uploading a submodule

30 views Asked by At

In Maven multi module project,

   Parent
         Module A
         Module B

I want to upload Parent and Module A artifacts to Maven Central but not the Module B artifact.

I am using nexus-staging-maven-plugin. I added skip parameter in Module B both for maven-deploy-plugin and nexus-staging-maven-plugin, but still build is uploading Module B to maven central.

Is there any way to skip Module B from getting uploaded.

1

There are 1 answers

0
Maithilish On BEST ANSWER

After much effort, I figured it out myself the way to block the release of certain modules to Maven Central (OSSRH). The maven-deploy-plugin uploads/deploys the artifacts to OSSRH and then the nexus-staging-maven-plugin stages and releases it. The trick is to add nexus plugin only to the modules which we want to release. I added following to parent and moduleA pom but not to the moduleB pom.

<build>
    <plugins>
        <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>${nexus-staging-maven-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <serverId>ossrh</serverId>
                <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                <autoReleaseAfterClose>true</autoReleaseAfterClose>
            </configuration>
        </plugin>
        ...

With this setup, the deploy-plugin uploads parent, moduleA and moduleB artifacts, but nexus-staging-maven-plugin stages and releases only parent and moduleA. Since there is no nexus plugin config in moduleB pom.xml, its artifact is not released to OSSRH.

However, without nexus-staging plugin in moduleB pom.xml you will get "missing nexusUrl" error if you run goals of nexus-staging such as mvn nexus-staging:release, mvn nexus-staging:drop or mvn nexus-staging:rc-list etc., In case you want to run goals of nexus-staging then temporarily add nexus-staging plugin snippet to moduleB; run these commands and remove the plugin from moduleB once work is done.

We can also use this workaround to upload single module. For example, I mistakenly uploaded moduleA-1.0 without the parent-1.0 artifact. When I again tried to upload both parent-1.0 and moduleA-1.0 artifacts it failed, as OSSRH doesn't allow overwrite of artifacts. The release was broken as parent was missing. To upload just the parent-1.0, I kept nexus-staging plugin in parent, removed it from moduleA and was able to upload just parent-1.0.