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

Add the ability to collect the project properties modified by the Java Plugin to the result. #357

Open
charleech opened this issue May 19, 2023 · 0 comments
Labels
enhancement New feature or request

Comments

@charleech
Copy link

charleech commented May 19, 2023

Is your feature request related to a problem? Please describe.
The Java Plugin try to modify the project properties on-the-fly as the following example.

@Mojo(
    name                         = "hello",
    defaultPhase                 = LifecyclePhase.NONE,
    requiresDependencyResolution = ResolutionScope.NONE,
    threadSafe                   = true
)
public class HelloMojo extends AbstractMojo {

    @Parameter(
        defaultValue = "${project}",
        required     = true,
        readonly     = true
    )
    protected MavenProject project;

    @Override
    public void execute() throws MojoExecutionException,
                                 MojoFailureException {
        this.project.getProperties().setProperty("my-key", "my-value");
    }

}

During executing integration test, the MavenExecutionResult only collect the properties statically defined in the testing pom.xml.

In this case it only prints project.build.sourceEncoding:UTF-8

@MavenJupiterExtension
class HelloMojoIT {

    @MavenTest
    void simpleHello(final MavenExecutionResult project) {

        MavenITAssertions.
            assertThat(project).
            isSuccessful();

        /*
         * This only print the propertied defined at the testing pom.xml.
         * 
         * The properties appended by the Java Plugin are not here.
         */
        project.getMavenProjectResult().
            getModel().
            getProperties().
            entrySet().
            forEach(
                e -> System.out.println(e.getKey() + ":" + e.getValue())
            );
    }
}

Describe the solution you'd like
It would be great if the ITF is able to collect the project properties modified by the Java Plugin to the result.

Describe alternatives you've considered
At the moment, I use the gmavenplus-plugin to print out those modified by java plugin project properties and use the assertion to compare string from the stdout.

<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>my-group</groupId>
    <artifactId>simple-hello-project</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>The simple hello plugin</name>
    <description>The build should be successful.</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>my-group</groupId>
                <artifactId>my-plugin</artifactId>
                <version>@project.version@</version>
                <executions>
                    <execution>
                        <id>hello</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>hello</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!--
                https://groovy.github.io/GMavenPlus/
                https://github.com/groovy/GMavenPlus
                https://groovy-lang.org/
                https://github.com/apache/groovy 
                -->
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>2.1.0</version>
                <executions>
                    <execution>
                        <id>print-share-secret</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <scripts>
                              <script><![CDATA[
def myValue = '${my-key}'
println('[INFO] The value is: ' + myValue)
                              ]]></script>
                            </scripts>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.groovy</groupId>
                        <artifactId>groovy</artifactId>
                        <version>4.0.12</version>
                        <scope>runtime</scope>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.groovy</groupId>
                        <artifactId>groovy-ant</artifactId>
                        <version>4.0.12</version>
                        <scope>runtime</scope>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
        MavenITAssertions.
            assertThat(project).
            isSuccessful().
            out().
            info().
            isNotEmpty().
            contains(
               ...
            );

Additional context
N/A

@charleech charleech added the enhancement New feature or request label May 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant