This changes the way Quarkus ClassLoading works,
to allow for isolated class loaders.
It also unifies how Quarkus is launched, so every
different mode we support uses the same mechanism
for both curation and launch.
Tests are now run in an isolated ClassLoader, which
means that a proxy is created that runs the tests
from within the isolated ClassLoader. This currently
has a quirk where @BeforeAll methods are run twice,
which will be fixed in the next JUnit release. This
can be worked around by using @QuarkusBeforeAll.
This allows extensions much greater control over the output,
including the ability to define new output formats.
There are some breaking changes introduced by this commit. Namely:
- The 'thin jar' now resides in its own folder, rather than in the target directory
- Native image is now produced from a dedicated native jar file, rather than by running native-image on an existing jar
- Most Maven/Gradle config has been moved to application.properties. This is still supported for now, but is deprecated
- The 'native-image' mojo has been depricated