Always use wagon classloader as a plexus class world

In CLI compiler, system classloader doesn't load all classes directly,
so wagons (including HttpWagon) happen to be invisible to
Plexus DI that leads to artifacts download failures.
This commit is contained in:
Ilya Muradyan
2021-06-29 14:05:30 +03:00
committed by teamcityserver
parent b93bd1fe09
commit f7c2adae30
@@ -11,7 +11,10 @@ import org.apache.maven.settings.Settings
import org.apache.maven.settings.SettingsUtils
import org.apache.maven.settings.TrackableBase
import org.apache.maven.settings.building.*
import org.apache.maven.wagon.Wagon
import org.codehaus.plexus.DefaultContainerConfiguration
import org.codehaus.plexus.DefaultPlexusContainer
import org.codehaus.plexus.classworlds.ClassWorld
import org.eclipse.aether.RepositorySystem
import org.eclipse.aether.RepositorySystemSession
import org.eclipse.aether.artifact.Artifact
@@ -99,7 +102,12 @@ internal class AetherResolveSession(
WagonTransporterFactory::class.java
)
val container = DefaultPlexusContainer()
val container = DefaultPlexusContainer(DefaultContainerConfiguration().apply {
val realmId = "wagon"
classWorld = ClassWorld(realmId, Wagon::class.java.classLoader)
realm = classWorld.getRealm(realmId)
})
locator.setServices(
WagonProvider::class.java,
PlexusWagonProvider(container)