Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Easy way to share profile configuration among profiles in Maven?

I have a maven profile defined like so;

<profile>
            <id>instrumentation</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>instrumentation.enabled</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>cobertura-maven-plugin</artifactId>
                        <version>2.5.1</version>
                        <configuration>
                            <formats>
                                <format>xml</format>
                                <format>html</format>
                            </formats>
                            <instrumentation>
                                <ignores>
                                </ignores>
                                <excludes>
                                    <exclude>**/Test*.class</exclude>
                                    <exclude>**/Abstract*.java</exclude>
                                    <!-- Log Classes -->
                                    <exclude>**/Log.class</exclude>
                                    <!-- Exception Classes -->
                                    <exclude>**/*Exception.class</exclude>
                                </excludes>
                            </instrumentation>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>cobertura</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>2.6</version>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                <!-- this is important -->
                                    <overwrite>true</overwrite>
                                    <!-- target -->
                                    <outputDirectory>${env.DERBASE}/java/${project.artifactId}/target/classes</outputDirectory>
                                    <resources>
                                        <resource>
                                        <!-- source -->
                                            <directory>${env.DERBASE}/java/${project.artifactId}/target/generated-classes/cobertura</directory>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

So what I would like to do is to change this line;

<goal>cobertura</goal>

to this;

<goal>instrumentation</goal>

If an env variable such as INSTRUMENTATION_EXCLUDE_TESTS is set.

I'm just wondering what the best way to accomplish this is? (i.e. without just copy and pasting the profile with the single line changed)

Many thanks!

like image 273
user1977749 Avatar asked Nov 03 '22 21:11

user1977749


1 Answers

So, I solved this by setting an environment variable, which could be either;

export COBERTURA_GOAL=cobertura

or

export COBERTURA_GOAL=instrument

Then, in my pom, defined the following property;

<cobertura.goal>${env.COBERTURA_GOAL}</cobertura.goal>

Which was inserted into;

 <goal>${cobertura.goal}</goal>
like image 144
user1977749 Avatar answered Nov 08 '22 04:11

user1977749