Thank you for your help.  I figured it out using the tiles-maven-plugin.

After fighting through the documentation I put together a simple tile and
pulled it into my pom.

To clarify what the docs are saying:

1.  The tile will be called tile.xml, will be installed in your maven
repository along with a pom.xml that has uses the tiles-maven-plugin.
2.  The project pom also uses the tiles-maven-plugin but it has the
configuration element to reference your tile.


Here is a concrete example of a tile for the jacoco plugin and then inject
the tile into your project pom.

tile.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0";
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
<build>
    <plugins>
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.9</version>
        <executions>
            <execution>
                <id>default-prepare-agent</id>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>default-report</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
            <execution>
                <id>default-check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                    <rules>
                        <!--  implementation is needed only for Maven 2 -->
                        <rule
implementation="org.jacoco.maven.RuleConfiguration">
                            <element>BUNDLE</element>
                            <limits>
                                <!--  implementation is needed only for
Maven 2  -->
                                <limit
implementation="org.jacoco.report.check.Limit">
                                    <counter>COMPLEXITY</counter>
                                    <value>COVEREDRATIO</value>
                                    <minimum>0.0</minimum>
                                </limit>
                            </limits>
                        </rule>
                    </rules>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>
</project>




pom.xml that accompanies the tile.xml in your maven repository

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0";
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.school</groupId>
    <artifactId>cdp_build_tile</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>tile</packaging>

    <distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Nexus Repository</name>
            <layout>default</layout>
            <url>
http://server.school.edu:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

    <repositories>
        <repository>
            <id>nexus</id>
            <name>Nexus Repository</name>
            <layout>default</layout>
            <url>http://server.school.edu:8081/nexus</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <build>
        <plugins>
            <plugin>
                <groupId>io.repaint.maven</groupId>
                <artifactId>tiles-maven-plugin</artifactId>
                <version>2.10</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
</project>


build section of your project's pom
    <build>
        <plugins>
            <plugin>
                <groupId>io.repaint.maven</groupId>
                <artifactId>tiles-maven-plugin</artifactId>
                <version>2.10</version>
                <extensions>true</extensions>
                <configuration>
                    <filtering>false</filtering>
                    <tiles>
                        <tile>edu.school:cdp_build_tile:1.0-SNAPSHOT</tile>
                    </tiles>
                </configuration>
            </plugin>
        </plugins>
    </build>





On Tue, May 30, 2017 at 1:25 PM, Karl Heinz Marbaise <khmarba...@gmx.de>
wrote:

> Hi,
>
> On 30/05/17 16:44, George Kopf wrote:
>
>> I apologize if this topic has already been discussed.  I searched all over
>> the web and the archives and didn't find anything, but I can't believe
>> that
>> I'm the only person with this request.
>>
>
> No need to apologize for asking...
>
>
>> I'm running the CI/CD pipeline for several java projects.
>>
>> We're using Git, Maven, Jenkins, Sonar, and Nexus.
>>
>> I would like to to have the developers create and own their own POM.XML
>> that will be used for Snapshots and Release Candidates.
>>
>
> and in consequence also for releases ?
>
>
>> I want to add my build specific POM elements to the effective POM for the
>> CI process but I don't want their POM to have to include all the extra
>> elements for Jacoco and Sonar (and whatever else we add in the future >
>> I can do this with profiles but then their POM will have everything in it.
>> I can do this with a parent POM but they already have a parent POM
>> (springboot) so that they can run locally.
>>
>
> If you have springboot as parent it might be a good choice to use spring
> as bom instead of as a parent...than you can control things different and
> better...
>
> Does it not work ?
>
> So where is the difference for a CI pom and usual pom file ?
>
> >
> I would have to insert my
>
>> parent pom in between and that seems fragile since mine is only for CI
>> builds.
>>
>
> What exactly is fragile here?
>
>
>
>> I can't do this with the settings.xml, on the build server, because it
>> doesn't have all the required elements.
>>
>
> Sure the settings.xml has a different purpose...
>
>
>> I hope that there is something obvious that I've missed (like a Jenkins
>> plugin) but I'm about to give up and just require the developers to live
>> with an excessively complicated POM file.
>>
>
>
> Maybe it's worth to take al look at the tiles-maven-plugin[1] which might
> help here...
>
>
> Maybe you can give an example what becomes so long or complicated ?
>
>
> Kind regards
> Karl Heinz Marbaise
>
> [1]: https://github.com/repaint-io/maven-tiles
>



-- 
George Kopf

Reply via email to