The daemon was implementing the legacy plexus.interactivity Prompter interface, which Maven 4 no longer
calls. Instead, it needs to implement the new maven.api Prompter interface. This also simplifies the code,
since the legacy prompter handling is now done by Maven core and it delegates to the new interface if an
old plugin uses it.
Also, prompting was skipped on dumb terminals for some reason. This meant that prompting could not be
tested with automated tests using ProcessBuilder. It also meant that piping input into mvnd on the terminal
wouldn't work. This made it inconsistent with regular Maven, which supports promting on a dumb terminal.
I've reactivated it, which makes the prompting integration tests for our Maven extension pass again.
There was also a missing console flush before sending the response to the daemon, which could lead to
inconsistent output, where the newline was sometimes printed before and sometimes after the next line from
the daemon.
Fixes#1292
mvnd still had mvn3 like code, just drop it and let base parser
do the work. All the mvnd needs is filtering.
Discriminating based on XML file hashes.
Fixes#1280
Adopt to https://github.com/apache/maven/pull/2134
Goal is to be able to perform required customizations to Terminal, but also "raw streams" (as Maven acts on false, while mvnd on true).
Seems MSC fork does not allow pushes from users who have commit rights on forked maven-mvnd, so am incorporating @ascheman changes here as well.
This PR is:
* fixes from PR https://github.com/apache/maven-mvnd/pull/1252
* plus fix SO isse (self injected cache)
* plus migrated whole daemon to Maven DI (from javax.inject) except those that override Sisu components
* ported latest Maven changes
* fix: Daemon lifecycle must be shared with daemon invoker
As long daemon is alive, the daemon invoker must be kept
alive as it holds the "resident" object graph of Maven.
* Add hack
This is a bug in resident invoker
The Server was using a SynchrnousQueue to coordinate the main thread
and the background thread that receives the request from the client.
A SynchronousQueue only allows insertions when a corresponding call
to `get` is in progress. However, since the receiver thread is started
before the call to `get`, there was a short time window, where the call
to `queue.offer` could fail and simply return `false`. This return code
was ignored.
A possible solution would have been to call `put` instead of `offer`,
but I decided to replace the queue with a Future, since we only wait
for a single element.
Co-authored-by: Stefan Oehme <st.oehme@gmail.com>
* the logging framework is extracted into its own jar and moved in the mvn/lib/ directory
* the other daemon jars are moved into the mvn/lib/mvnd directory and not used by maven at all
This makes maven class loader almost identical to the stock maven classloader, but for the logging framework
* Run client connection handler inside new thread, fixes#798
* Execute CI build on ubuntu-22.04
* ubuntu-18.04 image is now deprecated and there are brownout periods
being introduced where the builds are failing
* see https://github.com/actions/runner-images/issues/6002 for more
details
This is mostly for the integration tests of the Gradle Enterprise Maven extension,
which heavily test dependency resolution and reuse the same GAVs in many test,
e.g. a:b:1.0. It would be a lot of effort to rewrite all those tests and a shame
to restart the daemon every time. So I wanted to ask if you'd consider this flag
to disable the caching altogether.
Use the plexus Launcher to start the daemon server, just like we would
launch a normal Maven process.
This improves compatibility with any extensions or plugins that assume that
their ClassLoader is a ClassRealm.
* Fix core export provider
Since https://github.com/apache/maven/pull/616, the default
CoreExportProvider no longer uses the provided CoreExports,
but instead tries (and fails) to discover them itself.
This change fixes that by providing our own custom instance
of CoreExportProvider. This allows core extension to contribute
exported artifacts and exported packages again, like it used to
do before the Maven 4.x upgrade.
* Add integration tests for API-providing extensions
https://issues.apache.org/jira/browse/MNG-7586
* Remove CliMavenPluginManager which has the changed needed in alpha-3
* Align slf4j api with maven
* Make sure the invoker being called from IT reuses the settings from the invoker running the IT
* Fix IT when mrm is disabled
* Fix InvalidingPluginRealmCache
Co-authored-by: Guillaume Nodet <gnodet@gmail.com>
* Use muti-release jar to fallback mvnd-client to original maven
The mvnd-client is built to a muti-release jar. The default version of
DefaultClient is compiled against the same target version as the
embedded maven (4.x, so JDK 1.8) which only invoke the MavenCli.main().
The java-11 version is the full qualified mvnd-client.
* update cmd scripts
* embedded maven now works under JDK 1.8
Build SimpleAppender for JDK 1.8 since it is the log appender only
for the embedded maven
Co-authored-by: Guillaume Nodet <gnodet@gmail.com>