Possibly, but as far as I understand it would just move the problem to a
different location, since the user would have to declare the 2d execution,
no? Something which is important is that I'm trying to avoid a breaking
change, that is to say that there are existing POM files which work today
that I don't want to break once they upgrade the plugin version.

Le jeu. 23 sept. 2021 à 17:29, Lasse Lindqvist <lasse.k.lindqv...@gmail.com>
a écrit :

> Perhaps one way to make it so that users don't need to touch Surefire is to
> have two executions for your plugin, the first one being in maybe
> validation phase and doing
>
> // inject the project
> @Parameter(defaultValue = "${project}")
> private org.apache.maven.project.MavenProject project;
>
> ...
>
> project.getProperties().setProperty("junit.platform.listeners.uid.tracking.enabled",
> "true");
>
> Not sure if this works, but if it does it would allow the users to
> only configure one plugin.
>
>
> to 23. syysk. 2021 klo 18.04 Cédric Champeau (cedric.champ...@gmail.com)
> kirjoitti:
>
> > Thanks, but I totally disagree with you. The evidence that it's an
> > implementation detail is that the previous version did NOT need any user
> to
> > configure anything: it just works and nobody complained that it was
> > "magic": it just did what it was supposed to do. The fact that I cannot
> > configure properly the JUnit engine and that as a workaround you have to
> > ask the _user_ to do it is a PITA. That's the same for the build
> directory:
> > I can of course use different timestamps, but that again puts the burden
> to
> > the user when they shouldn't have to care: their builds should be correct
> > _whatever configuration_ they use.
> >
> > Le jeu. 23 sept. 2021 à 15:48, Mantas Gridinas <mgridi...@gmail.com> a
> > écrit :
> >
> > > > This means, in practice, that IF the native maven plugin is applied,
> > THEN
> > > > the surefire mojo needs to be configured to set this property. It's
> an
> > > > implementation detail that users shouldn't have to worry about. For
> > > Gradle
> > > > this was trivial to implement because we can just react to the
> presence
> > > of
> > > > the native plugin and reconfigure the test task to add this system
> > > > property. For Maven, this proves quite challenging.
> > >
> > > I'd argue otherwise. Users should be cognizant of what magical changes
> > are
> > > applied to their build processes. But to each their own.
> > >
> > > As for unique directory, why not utilize project.build.directory
> property
> > > that maven provides[1]? A quick workaround would be overriding it in
> > > specific profile (or commandline) to include build timestamp. Ex
> > >
> > > ${project.basedir}/target-${maven.build.timestamp}[2]
> > >
> > > The above would ensure that every build is given a unique directory,
> > > regardless of goals that you run. Though I'd put that behind a profile
> > or a
> > > commandline parameter, rather than encourage users to override the
> > default
> > > build directory. Not to mention this will probably break clean plugin
> > since
> > > it depends on project.build.directory. To fix that you could include
> > > fileSets property under clean plugin's goal configuration[3] and
> > configure
> > > it to delete all directories that have prefix of
> > > ${project.basedir)/target-.
> > >
> > > [1]
> > >
> > >
> >
> https://maven.apache.org/pom.html#:~:text=%3Cdirectory%3E%24%7Bproject.basedir%7D/target%3C/directory%3E
> > > [2]
> > >
> > >
> >
> https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#available-variables
> > > [3]
> > >
> > >
> >
> https://maven.apache.org/plugins/maven-clean-plugin/examples/delete_additional_files.html
> > >
> > >
> > >
> > > On Thu, Sep 23, 2021 at 11:54 AM Cédric Champeau <
> > > cedric.champ...@gmail.com>
> > > wrote:
> > >
> > > > Hi folks,
> > > >
> > > > I'm the maintainer of the GraalVM native build tools plugins for
> Maven
> > > and
> > > > Gradle. In the next release, we're moving to JUnit Platform 5.8,
> which
> > > now
> > > > integrates a "unique test id tracker", which before used to be
> > > implemented
> > > > in this plugin suite.
> > > >
> > > > The goal of this ID tracker is to collect _unique_ test IDs for every
> > > test,
> > > > so that we can build a native image which would execute the same
> tests
> > in
> > > > native mode. In other words, we first execute the tests in "JVM"
> mode,
> > > > using the surefire plugin, then there's a native image being built
> > which
> > > > includes the tests and uses the information from the JVM execution to
> > > tell
> > > > which tests to execute in the native mode (that's because traditional
> > > test
> > > > discovery mechanisms don't work in a native executable).
> > > >
> > > > Before JUnit 5.8, the listener which collects test ids used to live
> in
> > > the
> > > > "junit-platform-native" dependency, and because it did so, the sole
> > fact
> > > of
> > > > adding this dependency was enough to trigger the listener. That was a
> > > > temporary solution until JUnit actually *bundles* this listener, and
> > > that's
> > > > where things get more complicated.
> > > >
> > > > Starting with the 5.8 release, the listener is embedded into JUnit.
> > This
> > > > means we can remove it from the "junit-platform-native" dependency
> [1].
> > > > However, it also means that there must be a way to opt-in, because
> most
> > > > users don't need this listener active. Therefore, JUnit requires the
> > > > "junit.platform.listeners.uid.tracking.enabled" system property to be
> > > set.
> > > >
> > > > This means, in practice, that IF the native maven plugin is applied,
> > THEN
> > > > the surefire mojo needs to be configured to set this property. It's
> an
> > > > implementation detail that users shouldn't have to worry about. For
> > > Gradle
> > > > this was trivial to implement because we can just react to the
> presence
> > > of
> > > > the native plugin and reconfigure the test task to add this system
> > > > property. For Maven, this proves quite challenging.
> > > >
> > > > Currently, the only way I found is to have the user explicitly add
> this
> > > > system property to the surefire mojo:
> > > >
> > > > <plugin>
> > > >     <groupId>org.apache.maven.plugins</groupId>
> > > >     <artifactId>maven-surefire-plugin</artifactId>
> > > >     <version>3.0.0-M5</version>
> > > >     <configuration>
> > > >         <systemProperties>
> > > >
> > > >
> > >
> >
> <junit.platform.listeners.uid.tracking.enabled>true</junit.platform.listeners.uid.tracking.enabled>
> > > >         </systemProperties>
> > > >     </configuration>
> > > > </plugin>
> > > >
> > > >
> > > > This is certainly not nice, because as I said, the user shouldn't
> care:
> > > > because we apply the native plugin, we *know* that we need that
> > listener.
> > > > Therefore I'm looking for ways to automatically alter the
> configuration
> > > of
> > > > the surefire plugin if the native plugin is applied. More
> importantly,
> > > this
> > > > is a breaking change since upgrading the plugin now requires a
> > redundant
> > > > system property to be set.
> > > >
> > > > I found that I could do this in the following situations:
> > > >
> > > > - if my mojo runs _before_ the tests: this is not possible, since I
> > need
> > > > the results of the test execution to get the list of tests
> > > > - using a lifecycle extension: it seems doable, but then I'm
> replacing
> > > one
> > > > problem with another: the user has to register the extension, either
> by
> > > > updating the POM file or adding it to their extensions. This, again,
> > is a
> > > > no-go since we want this to be transparent.
> > > >
> > > > Last but not least, I'm not mentioning that there's a 2d property
> which
> > > > would ideally need to be set too, which is the directory where those
> > test
> > > > ids are dumped. By default it uses the target directory today, but
> this
> > > is
> > > > causing reliability issues, unless users do clean on every run. So it
> > > would
> > > > be great to be able to configure a *unique* directory per session.
> One
> > > > problem at a time, though.
> > > >
> > > > All in all, is there any other way to do what I need that I'm
> missing?
> > > >
> > > > Thanks for your help,
> > > >
> > > > [1] https://github.com/graalvm/native-build-tools/issues/131
> > > >
> > >
> > >
> > > --
> > > // Mantas
> > >
> >
>

Reply via email to