Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: Make POM file configurable #372

Open
hgschmie opened this issue Aug 16, 2023 · 0 comments
Open

Feature request: Make POM file configurable #372

hgschmie opened this issue Aug 16, 2023 · 0 comments

Comments

@hgschmie
Copy link
Contributor

Currently, the plugin operates on the pom file of the current project. This is mostly useful but there are use cases where a build wants to modify/flatten a pom file from another project. In this case, it would be great to specify the pom file e.g. with

<configuration>
    <pomFile>../../../some-other-project/pom.xml</pomFile>
...
</configuration>

and now the flattened pom file etc. is generated from that pom file. Currently, the plugin relies on the ${project} model that is passed in by maven and even though it reads the file directly, it mixes information from the maven project into the output.

If a pom file is specified, the plugin should build a new project and use this (instead of the main pom file).

(what is my use case):

I have a project with a large number of maven modules that I want to integration test using JPMS. The easiest way to do this is:

  • in an integration test setup job:
  • find the pom file for this maven module (it is at ../../../pom.xml :-) )
  • replace the artifactId foo with foo-it-parent, replace the packaging with pom.
  • strip the build section from the pom.
  • write the pom to a new file
  • install this file in the integration test repo as groupId:foo-it-parent:pom

use an integration test pom like this:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>groupId</groupId>
        <artifactId>foo-it-parent</artifactId>
        <version>@project.version@</version>
    </parent>

    <groupId>org.jdbi.it</groupId>
    <artifactId>test-module</artifactId>

    <dependencies>
        <dependency>
            <groupId>groupId</groupId>
            <artifactId>foo</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>groupId</groupId>
            <artifactId>foo</artifactId>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <dependenciesToScan>
                        <dependency>groupId:foo:*:*:tests</dependency>
                    </dependenciesToScan>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

This works surprisingly well and the flatten plugin is 90% of the way there (with the patches that I just sent), except that I can not load another pom file but the project file itself:

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.5.1-SNAPSHOT</version>
                <configuration>
                    <pomFile>../../../pom.xml</pomFile>
                    <flattenedPomFilename>${project.build.directory}/it-parent-pom.xml</flattenedPomFilename>
                    <updatePomFile>false</updatePomFile>
                    <defaultOperation>keep</defaultOperation>
                    <pomElements combine.self="override">
                        <packaging>replace</packaging>
                        <artifactId>replace</artifactId>
                        <build>remove</build>
                    </pomElements>
                    <replacementValues>
                        <packaging>pom</packaging>
                        <artifactId>@project.artifactId@-it-parent</artifactId>
                    </replacementValues>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <configuration>
                    <file>${project.build.directory}/it-parent-pom.xml</file>
                    <pomFile>${project.build.directory}/it-parent-pom.xml</pomFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant