whyceewhite
whyceewhite

Reputation: 6425

Ignore maven plugin during a build

How can I ignore my plugin (maven-antrun-plugin) during a build or deploy?

I am generating source files from a IDL tool (written in C). I used the maven-antrun-plugin to do the source generation and applied it to the generate-sources phase. Along with the build-helper-maven-plugin, the java source generated by the IDL tool is deposited in a generated sources folder and, ultimately, included in the jar packaging as source. Perfect!

Here's what I use in my maven build:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="target/generated-sources/" />
                            <!-- other task stuff here -->
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>target/generated-sources/gen-java</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

However, now the problem is that our team is directed to not use the IDL tool in our Continuous Integration (CI) environment; the plugin will fail in CI because the IDL tool is not installed. As a result, I must check in the generated source (with the other code under src/main/java) to our GIT repo.

I would like to be able to still run the maven-antrun-plugin, but, decouple it from the generated-sources phase or any lifecycle so that the CI environment can run my build. I will run the plugin manually/locally when I make a change so that the source will be generated and then checked in to the GIT repo.

Is this even possible? How can I ignore maven-antrun-plugin during an build or deploy?

Upvotes: 1

Views: 7302

Answers (2)

whyceewhite
whyceewhite

Reputation: 6425

As suggested by a commenter (Jarrod Roberson), maven profiles can be used to ignore the generation of sources in the maven-antrun-plugin plugin.

Specifically, adding the profiles block shown below addresses the issue. The default-profile profile is activated by default; it does not contain the maven-antrun-plugin block. However, the generate-source-profile does contain the maven-antrun-plugin that will initiate the sources generation.

<profiles>

    <profile>
        <id>default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>generate-sources-profile</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>generate-sources</id>
                            <phase>generate-sources</phase>
                            <configuration>
                                <tasks>
                                    <mkdir dir="target/generated-sources/" />
                                    <!-- other task stuff here -->
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

</profiles>

Thus, the Continuous Integration (CI) tool will do a normal build and deploy (mvn deploy). When I want to generate sources then I will run the generate sources profile by doing, for example, mvn clean install -P generate-sources-profile.

Upvotes: 6

MariuszS
MariuszS

Reputation: 31595

You can use profiles or simply skip maven-antrun-plugin execution

skip - Specifies whether the Antrun execution should be skipped.

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <skip>${skipAntRunForMe}</skip>
                <tasks>
                    <mkdir dir="target/generated-sources/"/>
                    <!-- other task stuff here -->
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

And inovke goal with param -DskipAntRunForMe

Upvotes: 3

Related Questions