Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Skip maven deploy for one module

I have a multi-module maven project. Parent pom looks like this:

<project>
    ...
    <packaging>pom</packaging>   
    <modules>
        <module>common</module>
        <module>a</module>
        <module>b</module>
    </modules>
</project>

common builds a jar, which is added as dependency in the other modules, like this:

<dependency>
    <groupId>my.project</groupId>
    <artifactId>common</artifactId>
    <version>${module.common.version}</version>
</dependency>

Modules a and b are Spring Boot projects having the spotify docker plugin.

I need to be able to run mvn deploy in order to get the spotify plugin push the docker image.

mvn install works fine, which builds the docker images. But in order to push them, when I run mvn deploy, it throws error for the common module:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project common: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

Searching for this error, this answer suggests adding the repository url in the distributionManagement section. But I don't want to deploy common. I just want to build it, so it gets injected as dependency in the other modules and deploy those other modules. How can I do that?

I tried to deploy only a and b using this command, but it gives the same error for common:

mvn clean \
   -DdockerRegistryHost=123.dkr.ecr.us-west-1.amazonaws.com/test1 \
   --projects a,b \
   --also-make \
   deploy
like image 804
Kartik Avatar asked May 24 '19 01:05

Kartik


People also ask

How do I skip a particular module in maven?

Maven version 3.2. 1 added this feature, you can use the -pl switch (shortcut for --projects list) with ! or - (source) to exclude certain submodules. Be careful in bash the character ! is a special character, so you either have to single quote it (like I did) or escape it with the backslash character.

What is maven clean deploy?

This command invokes the clean phase and then the install phase sequentially: clean : removes files generated at build-time in a project's directory ( target by default) install : installs the package into the local repository, for use as a dependency in other projects locally.


1 Answers

You can accomplish what you want by configuring the maven-deploy-plugin.

Try adding the following to your parent pom:

<build>
    ...
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    ...
 </build>

or add -Dmaven.deploy.skip=true to your command line.

like image 118
Steve C Avatar answered Oct 12 '22 03:10

Steve C