Reputation: 6425
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
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
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