diff --git a/maven-bom/pom.xml b/maven-bom/pom.xml index 3f9f983e31c2..d008f106d3fd 100644 --- a/maven-bom/pom.xml +++ b/maven-bom/pom.xml @@ -78,6 +78,18 @@ under the License. maven-builder-support ${project.version} + + org.apache.maven + maven-container + ${project.version} + + + org.apache.maven + maven-container + ${project.version} + tests + test-jar + org.apache.maven maven-core diff --git a/maven-compat/pom.xml b/maven-compat/pom.xml index d27b6893d851..cdb17029a59a 100644 --- a/maven-compat/pom.xml +++ b/maven-compat/pom.xml @@ -100,8 +100,10 @@ under the License. - org.codehaus.plexus - plexus-testing + org.apache.maven + maven-container + tests + test-jar test diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java b/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java index 735c6499f210..9dd82d0407ee 100644 --- a/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java +++ b/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java @@ -32,11 +32,11 @@ import javax.inject.Inject; import javax.inject.Named; -import org.codehaus.plexus.testing.PlexusTest; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenSession; @@ -67,14 +67,14 @@ import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy; import org.junit.jupiter.api.BeforeEach; -import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; +import static org.apache.maven.container.test.MavenTestExtension.getBasedir; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Jason van Zyl */ -@PlexusTest +@MavenTest public abstract class AbstractArtifactComponentTestCase //extends PlexusTestCase { @Inject @@ -101,7 +101,7 @@ public void setUp() throws Exception { RepositorySystemSession repoSession = initRepoSession(); - MavenSession session = new MavenSession( getContainer(), repoSession, new DefaultMavenExecutionRequest(), + MavenSession session = new MavenSession( repoSession, new DefaultMavenExecutionRequest(), new DefaultMavenExecutionResult() ); legacySupport.setSession( session ); diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java b/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java index 53cc388acd14..a0605a34bd8b 100644 --- a/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java +++ b/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java @@ -21,18 +21,18 @@ import java.io.File; +import javax.inject.Inject; + import org.apache.maven.artifact.AbstractArtifactComponentTestCase; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; import org.codehaus.plexus.util.FileUtils; import org.junit.jupiter.api.Test; -import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; +import static org.apache.maven.container.test.MavenTestExtension.getBasedir; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import javax.inject.Inject; - /** * @author Jason van Zyl */ diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java b/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java index d124894d6d26..76ac776e3d64 100644 --- a/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java +++ b/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java @@ -21,14 +21,14 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.versioning.VersionRange; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -@PlexusTest +@MavenTest public class DefaultArtifactFactoryTest { diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java b/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java index ca99ab2a53cc..413d9ee752b4 100644 --- a/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java +++ b/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java @@ -27,7 +27,7 @@ import javax.inject.Inject; -import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; +import static org.apache.maven.container.test.MavenTestExtension.getBasedir; /** * @author Jason van Zyl diff --git a/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java b/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java index 68a7522d5f99..8fdef0e32fe9 100644 --- a/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java +++ b/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java @@ -17,12 +17,12 @@ import java.util.List; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.legacy.resolver.transform.ArtifactTransformation; import org.apache.maven.repository.legacy.resolver.transform.ArtifactTransformationManager; import org.apache.maven.repository.legacy.resolver.transform.LatestArtifactTransformation; import org.apache.maven.repository.legacy.resolver.transform.ReleaseArtifactTransformation; import org.apache.maven.repository.legacy.resolver.transform.SnapshotTransformation; -import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -31,7 +31,7 @@ import javax.inject.Inject; /** @author Jason van Zyl */ -@PlexusTest +@MavenTest public class TransformationManagerTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java b/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java index bcb50a1ad2db..a32123d30bed 100644 --- a/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java +++ b/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java @@ -24,7 +24,7 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.model.Activation; import org.apache.maven.model.ActivationProperty; import org.apache.maven.model.Profile; @@ -37,7 +37,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -@PlexusTest +@MavenTest public class DefaultProfileManagerTest { diff --git a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java index 482a5b4730d6..4e589228fbeb 100644 --- a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java +++ b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java @@ -24,7 +24,7 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.model.building.ModelBuildingException; @@ -40,7 +40,7 @@ /** * @author Jason van Zyl */ -@PlexusTest +@MavenTest public abstract class AbstractMavenProjectTestCase { protected ProjectBuilder projectBuilder; diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java index af3655f826a4..93ca38bc8b2e 100644 --- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java +++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java @@ -23,7 +23,7 @@ import org.apache.maven.project.AbstractMavenProjectTestCase; -import static org.codehaus.plexus.testing.PlexusExtension.getTestFile; +import static org.apache.maven.container.test.MavenTestExtension.getTestFile; /** * @author Jason van Zyl diff --git a/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java b/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java index f68a9961fb80..557856bd5ff0 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java @@ -24,6 +24,7 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ResolutionErrorHandler; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenSession; @@ -32,14 +33,13 @@ import org.apache.maven.model.RepositoryPolicy; import org.apache.maven.plugin.LegacySupport; import org.apache.maven.repository.legacy.LegacyRepositorySystem; -import org.codehaus.plexus.testing.PlexusTest; import org.codehaus.plexus.PlexusContainer; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; import org.eclipse.aether.repository.LocalRepository; import org.junit.jupiter.api.Test; -import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; +import static org.apache.maven.container.test.MavenTestExtension.getBasedir; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -51,7 +51,7 @@ * * @author Benjamin Bentmann */ -@PlexusTest +@MavenTest public class LegacyRepositorySystemTest { @Inject @@ -113,7 +113,7 @@ public void testThatASystemScopedDependencyIsNotResolvedFromRepositories() LocalRepository localRepo = new LocalRepository( request.getLocalRepository().getBasedir() ); session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) ); LegacySupport legacySupport = container.lookup( LegacySupport.class ); - legacySupport.setSession( new MavenSession( container, session, new DefaultMavenExecutionRequest(), + legacySupport.setSession( new MavenSession( session, new DefaultMavenExecutionRequest(), new DefaultMavenExecutionResult() ) ); ArtifactResolutionResult result = repositorySystem.resolve( request ); diff --git a/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java b/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java index 9e8ab4e27192..2c1de8fe09d1 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java @@ -22,7 +22,7 @@ import java.util.Arrays; import java.util.List; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory; @@ -36,7 +36,7 @@ import javax.inject.Inject; -@PlexusTest +@MavenTest public class MirrorProcessorTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java index 14961c10d2d8..4dd4875da1a2 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java @@ -33,8 +33,8 @@ import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory; -import org.codehaus.plexus.testing.PlexusTest; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.TransferFailedException; import org.apache.maven.wagon.UnsupportedProtocolException; @@ -47,7 +47,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import static org.codehaus.plexus.testing.PlexusExtension.getTestFile; +import static org.apache.maven.container.test.MavenTestExtension.getTestFile; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -60,7 +60,7 @@ /** * @author Michal Maczka */ -@PlexusTest +@MavenTest public class DefaultWagonManagerTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java index ab9399504309..33300f6b72c8 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java @@ -20,9 +20,9 @@ import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.Authentication; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.settings.Server; -import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -35,7 +35,7 @@ * * @author Benjamin Bentmann */ -@PlexusTest +@MavenTest public class LegacyRepositorySystemTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java index 56018d39b2f3..cc9655c319a0 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java @@ -48,8 +48,8 @@ import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.OverConstrainedVersionException; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest; -import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -64,7 +64,7 @@ * * @author Brett Porter */ -@PlexusTest +@MavenTest public class DefaultArtifactCollectorTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java index 178933996eea..8ea3ef8b2ecb 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java @@ -27,7 +27,7 @@ import org.apache.maven.artifact.resolver.ResolutionNode; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.codehaus.plexus.PlexusContainer; import org.junit.jupiter.api.BeforeEach; @@ -41,7 +41,7 @@ * * @author Mark Hobson */ -@PlexusTest +@MavenTest public abstract class AbstractConflictResolverTest { // constants -------------------------------------------------------------- diff --git a/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java b/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java index 348dd978fd87..16c2c8fb48f9 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java @@ -18,7 +18,7 @@ import javax.inject.Inject; import org.apache.maven.artifact.ArtifactScopeEnum; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; @@ -30,7 +30,7 @@ * @author Oleg Gusakov * */ -@PlexusTest +@MavenTest public class DefaultClasspathTransformationTest { @Inject diff --git a/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java index 67a003ab171e..6aa5cd8a9aae 100644 --- a/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java +++ b/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java @@ -18,7 +18,7 @@ import javax.inject.Inject; import org.apache.maven.artifact.ArtifactScopeEnum; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,7 +30,7 @@ * @author Oleg Gusakov * */ -@PlexusTest +@MavenTest public class DefaultGraphConflictResolverTest { @Inject diff --git a/maven-container/pom.xml b/maven-container/pom.xml new file mode 100644 index 000000000000..12afe17f878a --- /dev/null +++ b/maven-container/pom.xml @@ -0,0 +1,71 @@ + + + + + + 4.0.0 + + + maven + org.apache.maven + 4.0.0-alpha-1-SNAPSHOT + + + maven-container + + + + org.eclipse.sisu + org.eclipse.sisu.plexus + + + org.eclipse.sisu + org.eclipse.sisu.inject + + + com.google.inject + guice + no_aop + + + org.junit.jupiter + junit-jupiter-api + test + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + + + \ No newline at end of file diff --git a/maven-container/src/main/java/org/apache/maven/container/Container.java b/maven-container/src/main/java/org/apache/maven/container/Container.java new file mode 100644 index 000000000000..0fce8eea99c8 --- /dev/null +++ b/maven-container/src/main/java/org/apache/maven/container/Container.java @@ -0,0 +1,64 @@ +package org.apache.maven.container; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.List; +import java.util.Map; + +import com.google.inject.Module; +import org.codehaus.plexus.classworlds.ClassWorld; +import org.codehaus.plexus.classworlds.realm.ClassRealm; +import org.codehaus.plexus.component.repository.ComponentDescriptor; +import org.codehaus.plexus.logging.LoggerManager; + +public interface Container +{ + + T lookup( Class role ); + + T lookup( Class role, String name ); + + Map lookupMap( Class role ); + + List lookupList( Class role ); + + void addComponent( Class role, I impl ); + + void addComponent( Class role, Class impl ); + + void addComponent( ComponentDescriptor componentDescriptor ); + + void release( Object component ); + + ClassRealm setLookupRealm( ClassRealm realm ); + + void discoverComponents( ClassRealm realm, Module... modules ); + + ClassWorld getClassWorld(); + + ClassRealm getContainerRealm(); + + void dispose(); + + // configuration + + void setLoggerManager( LoggerManager loggerManager ); + +} diff --git a/maven-container/src/main/java/org/apache/maven/container/DefaultContainer.java b/maven-container/src/main/java/org/apache/maven/container/DefaultContainer.java new file mode 100644 index 000000000000..e55b54f8c57d --- /dev/null +++ b/maven-container/src/main/java/org/apache/maven/container/DefaultContainer.java @@ -0,0 +1,184 @@ +package org.apache.maven.container; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; + +import com.google.inject.Module; +import org.codehaus.plexus.ContainerConfiguration; +import org.codehaus.plexus.DefaultContainerConfiguration; +import org.codehaus.plexus.DefaultPlexusContainer; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusContainerException; +import org.codehaus.plexus.classworlds.ClassWorld; +import org.codehaus.plexus.classworlds.realm.ClassRealm; +import org.codehaus.plexus.component.repository.ComponentDescriptor; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.codehaus.plexus.logging.LoggerManager; +import org.eclipse.sisu.plexus.Hints; + +import static java.util.Objects.requireNonNull; + +public class DefaultContainer implements Container +{ + + private final DefaultPlexusContainer container; + + public DefaultContainer( ClassRealm realm ) + { + try + { + ContainerConfiguration cc = new DefaultContainerConfiguration().setClassWorld( realm.getWorld() ) + .setRealm( realm ).setClassPathScanning( PlexusConstants.SCANNING_INDEX ).setAutoWiring( true ) + .setJSR250Lifecycle( true ).setName( "maven" ); + this.container = new DefaultPlexusContainer( cc ); + this.container.addComponent( this, Container.class.getName() ); + } + catch ( PlexusContainerException e ) + { + throw new RuntimeException( "Unable to create container", e ); + } + } + + public DefaultContainer( final DefaultPlexusContainer container ) + { + this.container = requireNonNull( container ); + this.container.addComponent( this, Container.class.getName() ); + } + + public void setLoggerManager( LoggerManager loggerManager ) + { + container.setLoggerManager( loggerManager ); + } + + /** + * Performs a component lookup obeying "plexus visibility rules". Returns {@code null} if no component found. + */ + public T lookup( final Class role ) + { + return lookup( role, "" ); + } + + /** + * Performs a component lookup obeying "plexus visibility rules". Returns {@code null} if no component found. + */ + public T lookup( final Class role, final String hint ) + { + try + { + return container.lookup( role, hint ); + } + catch ( ComponentLookupException e ) + { + if ( e.getCause() instanceof NoSuchElementException ) + { + return null; + } + throw new RuntimeException( e ); + } + } + + /** + * Performs a map component lookup obeying "plexus visibility rules". Never returns {@code null}. + */ + public Map lookupMap( final Class role ) + { + try + { + return container.lookupMap( role ); + } + catch ( ComponentLookupException e ) + { + throw new RuntimeException( e ); + } + } + + @Override + public List lookupList( Class role ) + { + try + { + return container.lookupList( role ); + } + catch ( ComponentLookupException e ) + { + throw new RuntimeException( e ); + } + } + + @Override + public void release( Object component ) + { + container.release( component ); + } + + @Override + public void addComponent( Class role, I impl ) + { + container.addComponent( impl, role, Hints.DEFAULT_HINT ); + } + + @Override + public void addComponent( Class role, Class impl ) + { + ComponentDescriptor cd = new ComponentDescriptor<>( impl, getContainerRealm() ); + cd.setRoleClass( role ); + addComponent( cd ); + } + + @Override + public void addComponent( ComponentDescriptor componentDescriptor ) + { + container.addComponentDescriptor( componentDescriptor ); + } + + @Override + public ClassRealm setLookupRealm( ClassRealm realm ) + { + return container.setLookupRealm( realm ); + } + + @Override + public void discoverComponents( ClassRealm realm, Module... modules ) + { + container.discoverComponents( realm, modules ); + } + + @Override + public ClassWorld getClassWorld() + { + return getContainerRealm().getWorld(); + } + + @Override + public ClassRealm getContainerRealm() + { + return container.getContainerRealm(); + } + + @Override + public void dispose() + { + container.dispose(); + } + +} diff --git a/maven-container/src/test/java/org/apache/maven/container/test/MavenTest.java b/maven-container/src/test/java/org/apache/maven/container/test/MavenTest.java new file mode 100644 index 000000000000..f8b058082409 --- /dev/null +++ b/maven-container/src/test/java/org/apache/maven/container/test/MavenTest.java @@ -0,0 +1,38 @@ +package org.apache.maven.container.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.extension.ExtendWith; + +/** + * Plexus test + */ +@Retention( RetentionPolicy.RUNTIME ) +@ExtendWith( MavenTestExtension.class ) +@Target( ElementType.TYPE ) +public @interface MavenTest +{ + +} diff --git a/maven-container/src/test/java/org/apache/maven/container/test/MavenTestExtension.java b/maven-container/src/test/java/org/apache/maven/container/test/MavenTestExtension.java new file mode 100644 index 000000000000..d0f8b6213fc6 --- /dev/null +++ b/maven-container/src/test/java/org/apache/maven/container/test/MavenTestExtension.java @@ -0,0 +1,325 @@ +package org.apache.maven.container.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Copyright 2001-2006 Codehaus Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.io.InputStream; +import java.util.Collections; + +import org.apache.maven.container.Container; +import org.apache.maven.container.DefaultContainer; +import org.codehaus.plexus.ContainerConfiguration; +import org.codehaus.plexus.DefaultContainerConfiguration; +import org.codehaus.plexus.DefaultPlexusContainer; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusContainerException; +import org.codehaus.plexus.configuration.PlexusConfiguration; +import org.codehaus.plexus.context.Context; +import org.codehaus.plexus.context.DefaultContext; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +/** + * This is a slightly modified version of the original plexus class + * available at https://raw.githubusercontent.com/codehaus-plexus/plexus-containers/master/plexus-container-default/ + * src/main/java/org/codehaus/plexus/PlexusTestCase.java + * in order to migrate the tests to JUnit 4. + * + * @author Jason van Zyl + * @author Trygve Laugstøl + * @author Michal Maczka + * @author Guillaume Nodet + */ +public class MavenTestExtension implements BeforeEachCallback, AfterEachCallback +{ + private ExtensionContext context; + private Container container; + private DefaultPlexusContainer plexus; + + private static String basedir; + + @Override + public void beforeEach( ExtensionContext context ) + throws Exception + { + basedir = getBasedir(); + this.context = context; + + getContainer().addComponent( Container.class, getContainer() ); + + plexus.addPlexusInjector( Collections.emptyList(), + binder -> binder.requestInjection( context.getRequiredTestInstance() ) ); + } + + @SuppressWarnings( "ResultOfMethodCallIgnored" ) + protected void setupContainer() + { + // ---------------------------------------------------------------------------- + // Context Setup + // ---------------------------------------------------------------------------- + + DefaultContext context = new DefaultContext(); + + context.put( "basedir", getBasedir() ); + + customizeContext( context ); + + boolean hasPlexusHome = context.contains( "plexus.home" ); + + if ( !hasPlexusHome ) + { + File f = getTestFile( "target/plexus-home" ); + + if ( !f.isDirectory() ) + { + f.mkdir(); + } + + context.put( "plexus.home", f.getAbsolutePath() ); + } + + // ---------------------------------------------------------------------------- + // Configuration + // ---------------------------------------------------------------------------- + + String config = getCustomConfigurationName(); + + ContainerConfiguration containerConfiguration = new DefaultContainerConfiguration() + .setName( "test" ) + .setContext( context.getContextData() ); + + if ( config != null ) + { + containerConfiguration.setContainerConfiguration( config ); + } + else + { + String resource = getConfigurationName( null ); + + containerConfiguration.setContainerConfiguration( resource ); + } + + customizeContainerConfiguration( containerConfiguration ); + + try + { + plexus = new DefaultPlexusContainer( containerConfiguration ); + } + catch ( PlexusContainerException e ) + { + throw new IllegalArgumentException( "Failed to create plexus container.", e ); + } + + container = new DefaultContainer( plexus ); + } + + /** + * Allow custom test case implementations do augment the default container configuration before + * executing tests. + * + * @param containerConfiguration {@link ContainerConfiguration}. + */ + protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) + { + containerConfiguration.setAutoWiring( true ); + containerConfiguration.setClassPathScanning( PlexusConstants.SCANNING_INDEX ); + } + + protected void customizeContext( Context context ) + { + } + + protected PlexusConfiguration customizeComponentConfiguration() + { + return null; + } + + @Override + public void afterEach( ExtensionContext context ) + throws Exception + { + if ( container != null ) + { + container.dispose(); + + container = null; + } + } + + public Container getContainer() + { + if ( container == null ) + { + setupContainer(); + } + + return container; + } + + protected InputStream getConfiguration() + throws Exception + { + return getConfiguration( null ); + } + + protected InputStream getConfiguration( String subname ) + throws Exception + { + return getResourceAsStream( getConfigurationName( subname ) ); + } + + protected String getCustomConfigurationName() + { + return null; + } + + /** + * Allow the retrieval of a container configuration that is based on the name + * of the test class being run. So if you have a test class called org.foo.FunTest, then + * this will produce a resource name of org/foo/FunTest.xml which would be used to + * configure the Plexus container before running your test. + * + * @param subname the subname + * @return A configruation name + */ + protected String getConfigurationName( String subname ) + { + Class testClass = context.getRequiredTestClass(); + for ( Class clazz = testClass; + clazz != null; + clazz = clazz.getSuperclass() ) + { + String name = clazz.getName().replace( '.', '/' ) + ".xml"; + if ( testClass.getClassLoader().getResource( name ) != null ) + { + return name; + } + } + return null; + } + + protected InputStream getResourceAsStream( String resource ) + { + return context.getRequiredTestClass().getResourceAsStream( resource ); + } + + protected ClassLoader getClassLoader() + { + return context.getRequiredTestClass().getClassLoader(); + } + + // ---------------------------------------------------------------------- + // Container access + // ---------------------------------------------------------------------- + + protected T lookup( Class componentClass ) + { + return getContainer().lookup( componentClass ); + } + + protected T lookup( Class componentClass, String roleHint ) + { + return getContainer().lookup( componentClass, roleHint ); + } + + protected void release( Object component ) + { + getContainer().release( component ); + } + + // ---------------------------------------------------------------------- + // Helper methods for sub classes + // ---------------------------------------------------------------------- + + public static File getTestFile( String path ) + { + return new File( getBasedir(), path ); + } + + public static File getTestFile( String basedir, + String path ) + { + File basedirFile = new File( basedir ); + + if ( !basedirFile.isAbsolute() ) + { + basedirFile = getTestFile( basedir ); + } + + return new File( basedirFile, path ); + } + + public static String getTestPath( String path ) + { + return getTestFile( path ).getAbsolutePath(); + } + + public static String getTestPath( String basedir, + String path ) + { + return getTestFile( basedir, path ).getAbsolutePath(); + } + + public static String getBasedir() + { + if ( basedir != null ) + { + return basedir; + } + + basedir = System.getProperty( "basedir" ); + + if ( basedir == null ) + { + basedir = new File( "" ).getAbsolutePath(); + } + + return basedir; + } + + public String getTestConfiguration() + { + return getTestConfiguration( context.getRequiredTestClass() ); + } + + public static String getTestConfiguration( Class clazz ) + { + String s = clazz.getName().replace( '.', '/' ); + + return s.substring( 0, s.indexOf( "$" ) ) + ".xml"; + } +} diff --git a/maven-core/pom.xml b/maven-core/pom.xml index 77c514045009..191f18efcf4f 100644 --- a/maven-core/pom.xml +++ b/maven-core/pom.xml @@ -60,6 +60,10 @@ under the License. org.apache.maven maven-artifact + + org.apache.maven + maven-container + org.apache.maven maven-plugin-api @@ -134,6 +138,13 @@ under the License. org.apache.commons commons-lang3 + + org.apache.maven + maven-container + tests + test-jar + test + org.slf4j slf4j-simple diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java index f80833b2e386..db6158d1e25e 100644 --- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java +++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java @@ -32,6 +32,7 @@ import org.apache.maven.execution.ProjectDependencyGraph; import org.apache.maven.graph.GraphBuilder; import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory; +import org.apache.maven.container.Container; import org.apache.maven.lifecycle.LifecycleExecutionException; import org.apache.maven.lifecycle.internal.ExecutionEventCatapult; import org.apache.maven.lifecycle.internal.LifecycleStarter; @@ -46,8 +47,6 @@ import org.apache.maven.project.ProjectBuilder; import org.apache.maven.repository.LocalRepositoryNotAccessibleException; import org.apache.maven.session.scope.internal.SessionScope; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.logging.Logger; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.RepositorySystemSession; @@ -68,6 +67,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import java.util.Set; import java.util.function.Function; import java.util.stream.Stream; @@ -93,7 +93,7 @@ public class DefaultMaven private LifecycleStarter lifecycleStarter; @Inject - protected PlexusContainer container; + protected Container container; @Inject private ExecutionEventCatapult eventCatapult; @@ -208,7 +208,7 @@ private MavenExecutionResult doExecute( MavenExecutionRequest request ) { DefaultRepositorySystemSession repoSession = (DefaultRepositorySystemSession) newRepositorySession( request ); - MavenSession session = new MavenSession( container, repoSession, request, result ); + MavenSession session = new MavenSession( repoSession, request, result ); sessionScope.seed( MavenSession.class, session ); @@ -252,14 +252,11 @@ private MavenExecutionResult doExecute( MavenExecutionRequest request, MavenSess return addExceptionToResult( result, e ); } - WorkspaceReader reactorWorkspace; - try + WorkspaceReader reactorWorkspace = container.lookup( WorkspaceReader.class, ReactorReader.HINT ); + if ( reactorWorkspace == null ) { - reactorWorkspace = container.lookup( WorkspaceReader.class, ReactorReader.HINT ); - } - catch ( ComponentLookupException e ) - { - return addExceptionToResult( result, e ); + return addExceptionToResult( result, new NoSuchElementException( "Unable to find a component with" + + " role=" + WorkspaceReader.class.getName() + " and hint=" + ReactorReader.HINT ) ); } // @@ -456,15 +453,7 @@ private Collection getLifecycleParticipants( ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); try { - try - { - lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) ); - } - catch ( ComponentLookupException e ) - { - // this is just silly, lookupList should return an empty list! - logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() ); - } + lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) ); Collection scannedRealms = new HashSet<>(); @@ -476,15 +465,7 @@ private Collection getLifecycleParticipants( { Thread.currentThread().setContextClassLoader( projectRealm ); - try - { - lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) ); - } - catch ( ComponentLookupException e ) - { - // this is just silly, lookupList should return an empty list! - logger.warn( "Failed to lookup lifecycle participants: " + e.getMessage() ); - } + lifecycleListeners.addAll( container.lookupList( AbstractMavenLifecycleParticipant.class ) ); } } } diff --git a/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java b/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java index 62991f11dd44..0cf1afee1b72 100644 --- a/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java +++ b/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java @@ -19,10 +19,6 @@ * under the License. */ -import java.net.MalformedURLException; - -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; - /** * Error constructing an artifact repository. * @@ -33,18 +29,6 @@ public class InvalidRepositoryException { private final String repositoryId; - public InvalidRepositoryException( String message, String repositoryId, MalformedURLException cause ) - { - super( message, cause ); - this.repositoryId = repositoryId; - } - - protected InvalidRepositoryException( String message, String repositoryId, ComponentLookupException cause ) - { - super( message, cause ); - this.repositoryId = repositoryId; - } - @Deprecated public InvalidRepositoryException( String message, Throwable t ) { @@ -58,6 +42,12 @@ public InvalidRepositoryException( String message, String repositoryId ) this.repositoryId = repositoryId; } + public InvalidRepositoryException( String message, String repositoryId, Throwable t ) + { + super( message, t ); + this.repositoryId = repositoryId; + } + public String getRepositoryId() { return repositoryId; diff --git a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java index cf3d746f889d..450779dcf602 100644 --- a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java +++ b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java @@ -38,10 +38,9 @@ import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.classrealm.ClassRealmRequest.RealmType; import org.apache.maven.extension.internal.CoreExportsProvider; +import org.apache.maven.container.Container; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; -import org.codehaus.plexus.MutablePlexusContainer; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.ClassWorld; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.DuplicateRealmException; @@ -91,11 +90,11 @@ public class DefaultClassRealmManager private final Set providedArtifacts; @Inject - public DefaultClassRealmManager( Logger logger, PlexusContainer container, + public DefaultClassRealmManager( Logger logger, Container container, List delegates, CoreExportsProvider exports ) { this.logger = logger; - this.world = ( (MutablePlexusContainer) container ).getClassWorld(); + this.world = container.getClassWorld(); this.containerRealm = container.getContainerRealm(); this.delegates = delegates; diff --git a/maven-core/src/main/java/org/apache/maven/eventspy/internal/DefaultEventSpyDispatcher.java b/maven-core/src/main/java/org/apache/maven/eventspy/internal/DefaultEventSpyDispatcher.java new file mode 100644 index 000000000000..217ebec6976a --- /dev/null +++ b/maven-core/src/main/java/org/apache/maven/eventspy/internal/DefaultEventSpyDispatcher.java @@ -0,0 +1,149 @@ +package org.apache.maven.eventspy.internal; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.maven.eventspy.EventSpy; +import org.apache.maven.execution.ExecutionListener; +import org.codehaus.plexus.logging.Logger; +import org.eclipse.aether.RepositoryListener; + +/** + * Dispatches callbacks to all registered eventspies. + * @since 3.0.2 + */ +@Named +@Singleton +public class DefaultEventSpyDispatcher implements EventSpyDispatcher +{ + + @Inject + private Logger logger; + + private List eventSpies; + + @Inject + public void setEventSpies( List eventSpies ) + { + // make copy to get rid of needless overhead for dynamic lookups + this.eventSpies = new ArrayList<>( eventSpies ); + } + + public List getEventSpies() + { + return eventSpies; + } + + public ExecutionListener chainListener( ExecutionListener listener ) + { + if ( eventSpies.isEmpty() ) + { + return listener; + } + return new EventSpyExecutionListener( this, listener ); + } + + public RepositoryListener chainListener( RepositoryListener listener ) + { + if ( eventSpies.isEmpty() ) + { + return listener; + } + return new EventSpyRepositoryListener( this, listener ); + } + + public void init( EventSpy.Context context ) + { + if ( eventSpies.isEmpty() ) + { + return; + } + for ( EventSpy eventSpy : eventSpies ) + { + try + { + eventSpy.init( context ); + } + catch ( Exception | LinkageError e ) + { + logError( "initialize", e, eventSpy ); + } + } + } + + public void onEvent( Object event ) + { + if ( eventSpies.isEmpty() ) + { + return; + } + for ( EventSpy eventSpy : eventSpies ) + { + try + { + eventSpy.onEvent( event ); + } + catch ( Exception | LinkageError e ) + { + logError( "notify", e, eventSpy ); + } + } + } + + public void close() + { + if ( eventSpies.isEmpty() ) + { + return; + } + for ( EventSpy eventSpy : eventSpies ) + { + try + { + eventSpy.close(); + } + catch ( Exception | LinkageError e ) + { + logError( "close", e, eventSpy ); + } + } + } + + private void logError( String action, Throwable e, EventSpy spy ) + { + String msg = "Failed to " + action + " spy " + spy.getClass().getName() + ": " + e.getMessage(); + + if ( logger.isDebugEnabled() ) + { + logger.warn( msg, e ); + } + else + { + logger.warn( msg ); + } + } + +} diff --git a/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java b/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java index 980bc153a297..96031dd30727 100644 --- a/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java +++ b/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java @@ -19,131 +19,25 @@ * under the License. */ -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import org.apache.maven.eventspy.EventSpy; import org.apache.maven.execution.ExecutionListener; -import org.codehaus.plexus.logging.Logger; import org.eclipse.aether.RepositoryListener; /** * Dispatches callbacks to all registered eventspies. * @since 3.0.2 */ -@Named -@Singleton -public class EventSpyDispatcher +public interface EventSpyDispatcher { - @Inject - private Logger logger; - - private List eventSpies; - - @Inject - public void setEventSpies( List eventSpies ) - { - // make copy to get rid of needless overhead for dynamic lookups - this.eventSpies = new ArrayList<>( eventSpies ); - } - - public List getEventSpies() - { - return eventSpies; - } - - public ExecutionListener chainListener( ExecutionListener listener ) - { - if ( eventSpies.isEmpty() ) - { - return listener; - } - return new EventSpyExecutionListener( this, listener ); - } - - public RepositoryListener chainListener( RepositoryListener listener ) - { - if ( eventSpies.isEmpty() ) - { - return listener; - } - return new EventSpyRepositoryListener( this, listener ); - } - - public void init( EventSpy.Context context ) - { - if ( eventSpies.isEmpty() ) - { - return; - } - for ( EventSpy eventSpy : eventSpies ) - { - try - { - eventSpy.init( context ); - } - catch ( Exception | LinkageError e ) - { - logError( "initialize", e, eventSpy ); - } - } - } + ExecutionListener chainListener( ExecutionListener listener ); - public void onEvent( Object event ) - { - if ( eventSpies.isEmpty() ) - { - return; - } - for ( EventSpy eventSpy : eventSpies ) - { - try - { - eventSpy.onEvent( event ); - } - catch ( Exception | LinkageError e ) - { - logError( "notify", e, eventSpy ); - } - } - } + RepositoryListener chainListener( RepositoryListener listener ); - public void close() - { - if ( eventSpies.isEmpty() ) - { - return; - } - for ( EventSpy eventSpy : eventSpies ) - { - try - { - eventSpy.close(); - } - catch ( Exception | LinkageError e ) - { - logError( "close", e, eventSpy ); - } - } - } + void init( EventSpy.Context context ); - private void logError( String action, Throwable e, EventSpy spy ) - { - String msg = "Failed to " + action + " spy " + spy.getClass().getName() + ": " + e.getMessage(); + void onEvent( Object event ); - if ( logger.isDebugEnabled() ) - { - logger.warn( msg, e ); - } - else - { - logger.warn( msg ); - } - } + void close(); } diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java index f8dbb035704f..b40ce8318fc8 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java +++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java @@ -34,8 +34,6 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.settings.Settings; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.eclipse.aether.RepositorySystemSession; /** @@ -288,12 +286,6 @@ public void setAllProjects( List allProjects ) /*if_not[MAVEN4]*/ - // - // Deprecated - // - - private PlexusContainer container; - private final Settings settings; @Deprecated @@ -304,10 +296,9 @@ public Map getProjectMap() } @Deprecated - public MavenSession( PlexusContainer container, RepositorySystemSession repositorySession, + public MavenSession( RepositorySystemSession repositorySession, MavenExecutionRequest request, MavenExecutionResult result ) { - this.container = container; this.request = request; this.result = result; this.settings = new SettingsAdapter( request ); @@ -315,30 +306,29 @@ public MavenSession( PlexusContainer container, RepositorySystemSession reposito } @Deprecated - public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result, + public MavenSession( MavenExecutionRequest request, MavenExecutionResult result, MavenProject project ) { - this( container, request, result, Arrays.asList( new MavenProject[]{project} ) ); + this( request, result, Arrays.asList( new MavenProject[]{project} ) ); } @Deprecated @SuppressWarnings( "checkstyle:parameternumber" ) - public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository, + public MavenSession( Settings settings, ArtifactRepository localRepository, EventDispatcher eventDispatcher, ReactorManager unused, List goals, String executionRootDir, Properties executionProperties, Date startTime ) { - this( container, settings, localRepository, eventDispatcher, unused, goals, executionRootDir, + this( settings, localRepository, eventDispatcher, unused, goals, executionRootDir, executionProperties, null, startTime ); } @Deprecated @SuppressWarnings( "checkstyle:parameternumber" ) - public MavenSession( PlexusContainer container, Settings settings, ArtifactRepository localRepository, + public MavenSession( Settings settings, ArtifactRepository localRepository, EventDispatcher eventDispatcher, ReactorManager unused, List goals, String executionRootDir, Properties executionProperties, Properties userProperties, Date startTime ) { - this.container = container; this.settings = settings; this.executionProperties = executionProperties; this.request = new DefaultMavenExecutionRequest(); @@ -350,10 +340,9 @@ public MavenSession( PlexusContainer container, Settings settings, ArtifactRepos } @Deprecated - public MavenSession( PlexusContainer container, MavenExecutionRequest request, MavenExecutionResult result, + public MavenSession( MavenExecutionRequest request, MavenExecutionResult result, List projects ) { - this.container = container; this.request = request; this.result = result; this.settings = new SettingsAdapter( request ); @@ -404,39 +393,5 @@ public Properties getExecutionProperties() return executionProperties; } - @Deprecated - public PlexusContainer getContainer() - { - return container; - } - - @Deprecated - public Object lookup( String role ) - throws ComponentLookupException - { - return container.lookup( role ); - } - - @Deprecated - public Object lookup( String role, String roleHint ) - throws ComponentLookupException - { - return container.lookup( role, roleHint ); - } - - @Deprecated - public List lookupList( String role ) - throws ComponentLookupException - { - return container.lookupList( role ); - } - - @Deprecated - public Map lookupMap( String role ) - throws ComponentLookupException - { - return container.lookupMap( role ); - } - /*end[MAVEN4]*/ } diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java index b62b59056d2d..1d3ab1b66721 100644 --- a/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java +++ b/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java @@ -22,8 +22,6 @@ import org.apache.maven.execution.scope.MojoExecutionScoped; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import com.google.inject.AbstractModule; @@ -35,13 +33,7 @@ public class MojoExecutionScopeModule { protected final MojoExecutionScope scope; - public MojoExecutionScopeModule( PlexusContainer container ) - throws ComponentLookupException - { - this( container.lookup( MojoExecutionScope.class ) ); - } - - protected MojoExecutionScopeModule( MojoExecutionScope scope ) + public MojoExecutionScopeModule( MojoExecutionScope scope ) { this.scope = scope; } diff --git a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java index 3e6f9f7b6710..ac80f19c7b97 100644 --- a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java +++ b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java @@ -23,7 +23,7 @@ import javax.inject.Named; import javax.inject.Singleton; -import org.codehaus.plexus.PlexusContainer; +import org.apache.maven.container.Container; import org.eclipse.sisu.Nullable; /** @@ -37,7 +37,7 @@ public class CoreExportsProvider private final CoreExports exports; @Inject - public CoreExportsProvider( PlexusContainer container, @Nullable CoreExports exports ) + public CoreExportsProvider( Container container, @Nullable CoreExports exports ) { if ( exports == null ) { diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java index f1bb442e242e..226a5dd76fb7 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java @@ -27,6 +27,11 @@ import java.util.Map; import java.util.Set; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.maven.container.Container; import org.apache.maven.lifecycle.DefaultLifecycles; import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer; import org.apache.maven.lifecycle.Lifecycle; @@ -37,8 +42,6 @@ import org.apache.maven.model.InputSource; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; @@ -52,24 +55,27 @@ * @author jdcasey * @author Kristian Rosenvold (extracted class only) */ -@Component( role = LifeCyclePluginAnalyzer.class ) +@Singleton +@Named public class DefaultLifecyclePluginAnalyzer implements LifeCyclePluginAnalyzer { public static final String DEFAULTLIFECYCLEBINDINGS_MODELID = "org.apache.maven:maven-core:" + DefaultLifecyclePluginAnalyzer.class.getPackage().getImplementationVersion() + ":default-lifecycle-bindings"; - @Requirement( role = LifecycleMapping.class ) - private Map lifecycleMappings; - - @Requirement - private DefaultLifecycles defaultLifeCycles; + private final Logger logger; + private final DefaultLifecycles defaultLifeCycles; + private final Container container; - @Requirement - private Logger logger; - - public DefaultLifecyclePluginAnalyzer() + @Inject + public DefaultLifecyclePluginAnalyzer( + Logger logger, + DefaultLifecycles defaultLifeCycles, + Container container ) { + this.logger = logger; + this.defaultLifeCycles = defaultLifeCycles; + this.container = container; } // These methods deal with construction intact Plugin object that look like they come from a standard @@ -90,8 +96,7 @@ public Set getPluginsBoundByDefaultToAllLifecycles( String packaging ) + Thread.currentThread().getContextClassLoader() ); } - LifecycleMapping lifecycleMappingForPackaging = lifecycleMappings.get( packaging ); - + LifecycleMapping lifecycleMappingForPackaging = container.lookup( LifecycleMapping.class, packaging ); if ( lifecycleMappingForPackaging == null ) { return null; diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java index f4dcffcd3055..69827fbe3d6e 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java @@ -20,9 +20,6 @@ */ import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.codehaus.plexus.component.configurator.ComponentConfigurationException; -import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** * @author Jason van Zyl @@ -48,27 +45,4 @@ public PluginConfigurationException( PluginDescriptor pluginDescriptor, String o this.originalMessage = originalMessage; } - public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage, - ExpressionEvaluationException cause ) - { - super( originalMessage, cause ); - this.pluginDescriptor = pluginDescriptor; - this.originalMessage = originalMessage; - } - - public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage, - ComponentConfigurationException cause ) - { - super( originalMessage, cause ); - this.pluginDescriptor = pluginDescriptor; - this.originalMessage = originalMessage; - } - - public PluginConfigurationException( PluginDescriptor pluginDescriptor, String originalMessage, - ComponentLookupException cause ) - { - super( originalMessage, cause ); - this.pluginDescriptor = pluginDescriptor; - this.originalMessage = originalMessage; - } } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java index d35ac6c37a08..3d8db89d787e 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java @@ -22,9 +22,6 @@ import org.apache.maven.model.Plugin; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.codehaus.plexus.classworlds.realm.ClassRealm; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException; -import org.codehaus.plexus.configuration.PlexusConfigurationException; /** * Exception which occurs to indicate that the plugin cannot be initialized due @@ -50,14 +47,6 @@ public PluginContainerException( MojoDescriptor mojoDescriptor, ClassRealm plugi this.pluginRealm = pluginRealm; } - public PluginContainerException( MojoDescriptor mojoDescriptor, ClassRealm pluginRealm, String message, - ComponentLookupException e ) - { - super( mojoDescriptor, message, e ); - - this.pluginRealm = pluginRealm; - } - public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message, Throwable e ) { super( plugin, message, e ); @@ -65,22 +54,6 @@ public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String m this.pluginRealm = pluginRealm; } - public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message, - PlexusConfigurationException e ) - { - super( plugin, message, e ); - - this.pluginRealm = pluginRealm; - } - - public PluginContainerException( Plugin plugin, ClassRealm pluginRealm, String message, - ComponentRepositoryException e ) - { - super( plugin, message, e ); - - this.pluginRealm = pluginRealm; - } - public ClassRealm getPluginRealm() { return pluginRealm; diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java deleted file mode 100644 index 48b8e5ef835f..000000000000 --- a/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.apache.maven.plugin; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.apache.maven.plugin.version.PluginVersionNotFoundException; -import org.apache.maven.plugin.version.PluginVersionResolutionException; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.settings.Settings; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; - -import java.util.Map; - -/** - * @author Jason van Zyl - */ -@Deprecated -public interface PluginManager -{ - String ROLE = PluginManager.class.getName(); - - void executeMojo( MavenProject project, MojoExecution execution, MavenSession session ) - throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException, - InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException; - - PluginDescriptor getPluginDescriptorForPrefix( String prefix ); - - Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project ); - - PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings, - ArtifactRepository localRepository ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException; - - Object getPluginComponent( Plugin plugin, String role, String roleHint ) - throws PluginManagerException, ComponentLookupException; - - Map getPluginComponents( Plugin plugin, String role ) - throws ComponentLookupException, PluginManagerException; - - /** - * @since 2.2.1 - */ - PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject project, MavenSession session ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException; - - /** - * @since 2.2.1 - */ - PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, MavenSession session ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException; - -} diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java index dc8f9a201ef8..1406758a3403 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java @@ -19,15 +19,10 @@ * under the License. */ -import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.PlexusContainerException; -import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; -import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException; -import org.codehaus.plexus.configuration.PlexusConfigurationException; /** * Exception in the plugin manager. @@ -97,7 +92,7 @@ protected PluginManagerException( MojoDescriptor mojoDescriptor, MavenProject pr goal = mojoDescriptor.getGoal(); } - public PluginManagerException( Plugin plugin, InvalidVersionSpecificationException cause ) + public PluginManagerException( Plugin plugin, Throwable cause ) { super( cause ); @@ -106,38 +101,8 @@ public PluginManagerException( Plugin plugin, InvalidVersionSpecificationExcepti pluginVersion = plugin.getVersion(); } - public PluginManagerException( Plugin plugin, String message, PlexusConfigurationException cause ) - { - super( message, cause ); - - pluginGroupId = plugin.getGroupId(); - pluginArtifactId = plugin.getArtifactId(); - pluginVersion = plugin.getVersion(); - } - - public PluginManagerException( Plugin plugin, String message, ComponentRepositoryException cause ) - { - super( message, cause ); - - pluginGroupId = plugin.getGroupId(); - pluginArtifactId = plugin.getArtifactId(); - pluginVersion = plugin.getVersion(); - } - - public PluginManagerException( MojoDescriptor mojoDescriptor, MavenProject project, String message, - NoSuchRealmException cause ) - { - super( message, cause ); - - this.project = project; - pluginGroupId = mojoDescriptor.getPluginDescriptor().getGroupId(); - pluginArtifactId = mojoDescriptor.getPluginDescriptor().getArtifactId(); - pluginVersion = mojoDescriptor.getPluginDescriptor().getVersion(); - goal = mojoDescriptor.getGoal(); - } - public PluginManagerException( MojoDescriptor mojoDescriptor, String message, MavenProject project, - PlexusContainerException cause ) + Throwable cause ) { super( message, cause ); @@ -151,15 +116,6 @@ public PluginManagerException( MojoDescriptor mojoDescriptor, String message, Ma goal = mojoDescriptor.getGoal(); } - public PluginManagerException( Plugin plugin, String message, PlexusContainerException cause ) - { - super( message, cause ); - - pluginGroupId = plugin.getGroupId(); - pluginArtifactId = plugin.getArtifactId(); - pluginVersion = plugin.getVersion(); - } - public PluginManagerException( Plugin plugin, String message, MavenProject project ) { super( message ); diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java index 7bb19bb0d94c..0f64fefa562a 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java @@ -22,7 +22,9 @@ import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.classrealm.ClassRealmManager; +import org.apache.maven.container.Container; import org.apache.maven.execution.MavenSession; +import org.apache.maven.execution.scope.internal.MojoExecutionScope; import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule; import org.apache.maven.model.Plugin; import org.apache.maven.monitor.logging.DefaultLog; @@ -57,19 +59,15 @@ import org.apache.maven.project.ExtensionDescriptorBuilder; import org.apache.maven.project.MavenProject; import org.apache.maven.rtinfo.RuntimeInformation; +import org.apache.maven.session.scope.internal.SessionScope; import org.apache.maven.session.scope.internal.SessionScopeModule; -import org.codehaus.plexus.DefaultPlexusContainer; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.realm.ClassRealm; -import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException; import org.codehaus.plexus.component.configurator.ComponentConfigurationException; import org.codehaus.plexus.component.configurator.ComponentConfigurator; import org.codehaus.plexus.component.configurator.ConfigurationListener; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; import org.codehaus.plexus.component.repository.ComponentDescriptor; -import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.configuration.PlexusConfiguration; import org.codehaus.plexus.configuration.PlexusConfigurationException; import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; @@ -139,7 +137,7 @@ public class DefaultMavenPluginManager private LoggerManager loggerManager; @Inject - private PlexusContainer container; + private Container container; @Inject private ClassRealmManager classRealmManager; @@ -425,26 +423,19 @@ private void discoverPluginComponents( final ClassRealm pluginRealm, Plugin plug PluginDescriptor pluginDescriptor ) throws PluginContainerException { - try + if ( pluginDescriptor != null ) { - if ( pluginDescriptor != null ) + for ( ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents() ) { - for ( ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents() ) - { - componentDescriptor.setRealm( pluginRealm ); - container.addComponentDescriptor( componentDescriptor ); - } + componentDescriptor.setRealm( pluginRealm ); + container.addComponent( componentDescriptor ); } - - ( (DefaultPlexusContainer) container ).discoverComponents( pluginRealm, new SessionScopeModule( container ), - new MojoExecutionScopeModule( container ) ); - } - catch ( ComponentLookupException | CycleDetectedInComponentGraphException e ) - { - throw new PluginContainerException( plugin, pluginRealm, - "Error in component graph of plugin " + plugin.getId() + ": " - + e.getMessage(), e ); } + + container.discoverComponents( + pluginRealm, + new SessionScopeModule( container.lookup( SessionScope.class ) ), + new MojoExecutionScopeModule( container.lookup( MojoExecutionScope.class ) ) ); } private List toAetherArtifacts( final List pluginArtifacts ) @@ -515,7 +506,7 @@ public T getConfiguredMojo( Class mojoInterface, MavenSession session, Mo { mojo = container.lookup( mojoInterface, mojoDescriptor.getRoleHint() ); } - catch ( ComponentLookupException e ) + catch ( Throwable e ) { Throwable cause = e.getCause(); while ( cause != null && !( cause instanceof LinkageError ) @@ -660,12 +651,6 @@ private void populatePluginFields( Object mojo, MojoDescriptor mojoDescriptor, C throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), message, e ); } - catch ( ComponentLookupException e ) - { - throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), - "Unable to retrieve component configurator " + configuratorId - + " for configuration of mojo " + mojoDescriptor.getId(), e ); - } catch ( NoClassDefFoundError e ) { ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); @@ -691,14 +676,7 @@ private void populatePluginFields( Object mojo, MojoDescriptor mojoDescriptor, C { if ( configurator != null ) { - try - { - container.release( configurator ); - } - catch ( ComponentLifecycleException e ) - { - logger.debug( "Failed to release mojo configurator - ignoring." ); - } + container.release( configurator ); } } } @@ -761,21 +739,7 @@ public void releaseMojo( Object mojo, MojoExecution mojoExecution ) { if ( mojo != null ) { - try - { - container.release( mojo ); - } - catch ( ComponentLifecycleException e ) - { - String goalExecId = mojoExecution.getGoal(); - - if ( mojoExecution.getExecutionId() != null ) - { - goalExecId += " {execution: " + mojoExecution.getExecutionId() + "}"; - } - - logger.debug( "Error releasing mojo for " + goalExecId, e ); - } + container.release( mojo ); } } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java deleted file mode 100644 index 547e45712932..000000000000 --- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java +++ /dev/null @@ -1,260 +0,0 @@ -package org.apache.maven.plugin.internal; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.util.Map; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; -import org.apache.maven.execution.MavenSession; -import org.apache.maven.model.Plugin; -import org.apache.maven.plugin.InvalidPluginDescriptorException; -import org.apache.maven.plugin.InvalidPluginException; -import org.apache.maven.plugin.LegacySupport; -import org.apache.maven.plugin.MavenPluginManager; -import org.apache.maven.plugin.MojoExecution; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.PluginConfigurationException; -import org.apache.maven.plugin.PluginDescriptorParsingException; -import org.apache.maven.plugin.PluginManager; -import org.apache.maven.plugin.PluginManagerException; -import org.apache.maven.plugin.PluginNotFoundException; -import org.apache.maven.plugin.PluginResolutionException; -import org.apache.maven.plugin.descriptor.PluginDescriptor; -import org.apache.maven.plugin.prefix.DefaultPluginPrefixRequest; -import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException; -import org.apache.maven.plugin.prefix.PluginPrefixRequest; -import org.apache.maven.plugin.prefix.PluginPrefixResolver; -import org.apache.maven.plugin.prefix.PluginPrefixResult; -import org.apache.maven.plugin.version.DefaultPluginVersionRequest; -import org.apache.maven.plugin.version.PluginVersionNotFoundException; -import org.apache.maven.plugin.version.PluginVersionRequest; -import org.apache.maven.plugin.version.PluginVersionResolutionException; -import org.apache.maven.plugin.version.PluginVersionResolver; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.settings.Settings; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; - -/** - * @author Benjamin Bentmann - */ -@Named -@Singleton -public class DefaultPluginManager - implements PluginManager -{ - - @Inject - private PlexusContainer container; - - @Inject - private MavenPluginManager pluginManager; - - @Inject - private PluginVersionResolver pluginVersionResolver; - - @Inject - private PluginPrefixResolver pluginPrefixResolver; - - @Inject - private LegacySupport legacySupport; - - public void executeMojo( MavenProject project, MojoExecution execution, MavenSession session ) - throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException, - InvalidDependencyVersionException, PluginManagerException, PluginConfigurationException - { - throw new UnsupportedOperationException(); - } - - public Object getPluginComponent( Plugin plugin, String role, String roleHint ) - throws PluginManagerException, ComponentLookupException - { - MavenSession session = legacySupport.getSession(); - - PluginDescriptor pluginDescriptor; - try - { - pluginDescriptor = - pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(), - session.getRepositorySession() ); - - pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null ); - } - catch ( Exception e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); - } - - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader( pluginDescriptor.getClassRealm() ); - - return container.lookup( role, roleHint ); - } - finally - { - Thread.currentThread().setContextClassLoader( oldClassLoader ); - } - } - - public Map getPluginComponents( Plugin plugin, String role ) - throws ComponentLookupException, PluginManagerException - { - MavenSession session = legacySupport.getSession(); - - PluginDescriptor pluginDescriptor; - try - { - pluginDescriptor = - pluginManager.getPluginDescriptor( plugin, session.getCurrentProject().getRemotePluginRepositories(), - session.getRepositorySession() ); - - pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null ); - } - catch ( Exception e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); - } - - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader( pluginDescriptor.getClassRealm() ); - - return container.lookupMap( role ); - } - finally - { - Thread.currentThread().setContextClassLoader( oldClassLoader ); - } - } - - public Plugin getPluginDefinitionForPrefix( String prefix, MavenSession session, MavenProject project ) - { - PluginPrefixRequest request = new DefaultPluginPrefixRequest( prefix, session ); - request.setPom( project.getModel() ); - - try - { - PluginPrefixResult result = pluginPrefixResolver.resolve( request ); - - Plugin plugin = new Plugin(); - plugin.setGroupId( result.getGroupId() ); - plugin.setArtifactId( result.getArtifactId() ); - - return plugin; - } - catch ( NoPluginFoundForPrefixException e ) - { - return null; - } - } - - public PluginDescriptor getPluginDescriptorForPrefix( String prefix ) - { - MavenSession session = legacySupport.getSession(); - - PluginPrefixRequest request = new DefaultPluginPrefixRequest( prefix, session ); - - try - { - PluginPrefixResult result = pluginPrefixResolver.resolve( request ); - - Plugin plugin = new Plugin(); - plugin.setGroupId( result.getGroupId() ); - plugin.setArtifactId( result.getArtifactId() ); - - return loadPluginDescriptor( plugin, session.getCurrentProject(), session ); - } - catch ( Exception e ) - { - return null; - } - } - - public PluginDescriptor loadPluginDescriptor( Plugin plugin, MavenProject project, MavenSession session ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException - { - return verifyPlugin( plugin, project, session.getSettings(), session.getLocalRepository() ); - } - - public PluginDescriptor loadPluginFully( Plugin plugin, MavenProject project, MavenSession session ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException - { - PluginDescriptor pluginDescriptor = loadPluginDescriptor( plugin, project, session ); - - try - { - pluginManager.setupPluginRealm( pluginDescriptor, session, null, null, null ); - } - catch ( PluginResolutionException e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); - } - - return pluginDescriptor; - } - - public PluginDescriptor verifyPlugin( Plugin plugin, MavenProject project, Settings settings, - ArtifactRepository localRepository ) - throws ArtifactResolutionException, PluginVersionResolutionException, ArtifactNotFoundException, - InvalidVersionSpecificationException, InvalidPluginException, PluginManagerException, PluginNotFoundException, - PluginVersionNotFoundException - { - MavenSession session = legacySupport.getSession(); - - if ( plugin.getVersion() == null ) - { - PluginVersionRequest versionRequest = - new DefaultPluginVersionRequest( plugin, session.getRepositorySession(), - project.getRemotePluginRepositories() ); - plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() ); - } - - try - { - return pluginManager.getPluginDescriptor( plugin, project.getRemotePluginRepositories(), - session.getRepositorySession() ); - } - catch ( PluginResolutionException e ) - { - throw new PluginNotFoundException( plugin, project.getPluginArtifactRepositories() ); - } - catch ( PluginDescriptorParsingException | InvalidPluginDescriptorException e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); - } - } - -} diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java index e5c89e6f1a70..301c9a7f585f 100644 --- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java +++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java @@ -37,6 +37,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.InvalidRepositoryException; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.container.Container; import org.apache.maven.classrealm.ClassRealmManager; import org.apache.maven.model.Build; import org.apache.maven.model.Extension; @@ -49,7 +50,6 @@ import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.plugin.version.PluginVersionResolutionException; import org.apache.maven.repository.RepositorySystem; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.logging.Logger; import org.eclipse.aether.graph.DependencyFilter; @@ -72,7 +72,7 @@ public class DefaultProjectBuildingHelper private Logger logger; @Inject - private PlexusContainer container; + private Container container; @Inject private ClassRealmManager classRealmManager; diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java index 271e6d656cd4..e43c869880c8 100644 --- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java +++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java @@ -57,6 +57,7 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.container.Container; import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; @@ -78,8 +79,6 @@ import org.apache.maven.repository.internal.MavenWorkspaceReader; import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest; import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.logging.Logger; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.RepositoryPolicy; @@ -105,7 +104,7 @@ public class MavenMetadataSource private ProjectBuilder projectBuilder; @Inject - private PlexusContainer container; + private Container container; @Inject private Logger logger; @@ -537,19 +536,10 @@ public static Set createArtifacts( ArtifactFactory artifactFactory, Li private ProjectBuilder getProjectBuilder() { - if ( projectBuilder != null ) - { - return projectBuilder; - } - - try + if ( projectBuilder == null ) { projectBuilder = container.lookup( ProjectBuilder.class ); } - catch ( ComponentLookupException e ) - { - // Won't happen - } return projectBuilder; } diff --git a/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java b/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java index cd88104846f1..c66d8a526c12 100644 --- a/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java +++ b/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java @@ -24,8 +24,6 @@ import org.apache.maven.SessionScoped; import org.apache.maven.execution.MavenSession; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import com.google.inject.AbstractModule; @@ -44,13 +42,7 @@ public SessionScopeModule() this( new SessionScope() ); } - public SessionScopeModule( PlexusContainer container ) - throws ComponentLookupException - { - this( container.lookup( SessionScope.class ) ); - } - - private SessionScopeModule( SessionScope scope ) + public SessionScopeModule( SessionScope scope ) { this.scope = scope; } diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java index 2d9400ef47cf..aab3a67cb6c0 100644 --- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java @@ -28,10 +28,12 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.InvalidRepositoryException; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; +import org.apache.maven.container.Container; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; import org.apache.maven.model.Exclusion; @@ -44,8 +46,6 @@ import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; -import org.codehaus.plexus.testing.PlexusTest; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.util.FileUtils; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; @@ -55,12 +55,12 @@ import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; -@PlexusTest +@MavenTest public abstract class AbstractCoreMavenComponentTestCase { @Inject - protected PlexusContainer container; + protected Container container; @Inject protected RepositorySystem repositorySystem; @@ -70,8 +70,9 @@ public abstract class AbstractCoreMavenComponentTestCase abstract protected String getProjectsDirectory(); - protected PlexusContainer getContainer() { - return container; + protected T lookup( Class role ) + { + return container.lookup( role ); } protected File getProject(String name ) @@ -161,7 +162,7 @@ protected MavenSession createMavenSession( File pom, Properties executionPropert initRepoSession( configuration ); MavenSession session = - new MavenSession( getContainer(), configuration.getRepositorySession(), request, + new MavenSession( configuration.getRepositorySession(), request, new DefaultMavenExecutionResult() ); session.setProjects( projects ); session.setAllProjects( session.getProjects() ); diff --git a/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java b/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java index b65d38f472f2..3a85ea4ad6a4 100644 --- a/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java +++ b/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java @@ -63,7 +63,7 @@ public void testThatErrorDuringProjectDependencyGraphCreationAreStored() public void testMavenProjectNoDuplicateArtifacts() throws Exception { - MavenProjectHelper mavenProjectHelper = getContainer().lookup( MavenProjectHelper.class ); + MavenProjectHelper mavenProjectHelper = lookup( MavenProjectHelper.class ); MavenProject mavenProject = new MavenProject(); mavenProject.setArtifact( new DefaultArtifact( "g", "a", "1.0", Artifact.SCOPE_TEST, "jar", "", null ) ); File artifactFile = Files.createTempFile( "foo", "tmp").toFile(); diff --git a/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java b/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java index 6d8f9751232e..44a0cf58b389 100644 --- a/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java +++ b/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java @@ -27,8 +27,6 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.ComponentDescriptor; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -111,15 +109,9 @@ protected String getProjectsDirectory() public void testDependencyInjection() throws Exception { - PlexusContainer container = getContainer(); + container.addComponent( AbstractMavenLifecycleParticipant.class, InjectDependencyLifecycleListener.class ); - ComponentDescriptor cd = - new ComponentDescriptor<>( InjectDependencyLifecycleListener.class, - container.getContainerRealm() ); - cd.setRoleClass( AbstractMavenLifecycleParticipant.class ); - container.addComponentDescriptor( cd ); - - Maven maven = container.lookup( Maven.class ); + Maven maven = lookup( Maven.class ); File pom = getProject( "lifecycle-listener-dependency-injection" ); MavenExecutionRequest request = createMavenExecutionRequest( pom ); request.setGoals( Arrays.asList( "validate" ) ); @@ -146,16 +138,12 @@ public void testReactorDependencyInjection() assertEquals( Arrays.asList( "parent", "module-b", "module-a" ), reactorOrder ); } - private List getReactorOrder( String testProject, Class participant ) + private List getReactorOrder( String testProject, Class participant ) throws Exception { - PlexusContainer container = getContainer(); - - ComponentDescriptor cd = new ComponentDescriptor<>( participant, container.getContainerRealm() ); - cd.setRoleClass( AbstractMavenLifecycleParticipant.class ); - container.addComponentDescriptor( cd ); + container.addComponent( AbstractMavenLifecycleParticipant.class, participant ); - Maven maven = container.lookup( Maven.class ); + Maven maven = lookup( Maven.class ); File pom = getProject( testProject ); MavenExecutionRequest request = createMavenExecutionRequest( pom ); request.setGoals( Arrays.asList( "validate" ) ); diff --git a/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java b/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java index 9dd5cf19d136..17e6f1713ddb 100644 --- a/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java +++ b/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java @@ -24,19 +24,19 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; -import org.codehaus.plexus.PlexusContainer; +import org.apache.maven.container.Container; +import org.apache.maven.container.test.MavenTest; import org.codehaus.plexus.util.FileUtils; import org.junit.jupiter.api.Test; import static org.codehaus.plexus.testing.PlexusExtension.getTestFile; import static org.junit.jupiter.api.Assertions.assertEquals; -@PlexusTest +@MavenTest public class ArtifactHandlerTest { @Inject - PlexusContainer container; + Container container; @Test public void testAptConsistency() diff --git a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java index 02be60e0fda6..b674e4d32c49 100644 --- a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java +++ b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java @@ -24,15 +24,15 @@ import javax.inject.Inject; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.settings.Profile; import org.apache.maven.settings.Repository; import org.apache.maven.settings.Settings; -import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -@PlexusTest +@MavenTest public class DefaultMavenExecutionRequestPopulatorTest { @Inject diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java index 81dfb7140453..367ec5bd4e1e 100644 --- a/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java +++ b/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java @@ -23,7 +23,7 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -34,7 +34,7 @@ /** * @author Kristian Rosenvold */ -@PlexusTest +@MavenTest public class DefaultLifecyclesTest { @Inject diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java index b4c12a3e288c..448ffda3ca9b 100644 --- a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java +++ b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java @@ -500,8 +500,8 @@ public void afterProjectExecutionFailure( ProjectExecutionEvent event ) log.add( "afterProjectExecutionFailure " + event.getProject().getArtifactId() ); } }; - getContainer().lookup( DelegatingProjectExecutionListener.class ).addProjectExecutionListener( projectListener ); - getContainer().lookup( DelegatingMojoExecutionListener.class ).addMojoExecutionListener( mojoListener ); + lookup( DelegatingProjectExecutionListener.class ).addProjectExecutionListener( projectListener ); + lookup( DelegatingMojoExecutionListener.class ).addMojoExecutionListener( mojoListener ); try { @@ -509,8 +509,8 @@ public void afterProjectExecutionFailure( ProjectExecutionEvent event ) } finally { - getContainer().lookup( DelegatingProjectExecutionListener.class ).removeProjectExecutionListener( projectListener ); - getContainer().lookup( DelegatingMojoExecutionListener.class ).removeMojoExecutionListener( mojoListener ); + lookup( DelegatingProjectExecutionListener.class ).removeProjectExecutionListener( projectListener ); + lookup( DelegatingMojoExecutionListener.class ).removeMojoExecutionListener( mojoListener ); } List expectedLog = Arrays.asList( "beforeProjectExecution project-basic", // diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java index 8df505527299..d2dd229a4cd6 100644 --- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java +++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java @@ -223,7 +223,7 @@ public static MavenSession getMavenSession() mavenExecutionRequest.setExecutionListener( new AbstractExecutionListener() ); mavenExecutionRequest.setGoals( Arrays.asList( "clean", "aggr", "install" ) ); mavenExecutionRequest.setDegreeOfConcurrency( 1 ); - final MavenSession session = new MavenSession( null, null, mavenExecutionRequest, defaultMavenExecutionResult ); + final MavenSession session = new MavenSession( null, mavenExecutionRequest, defaultMavenExecutionResult ); final ProjectDependencyGraphStub dependencyGraphStub = new ProjectDependencyGraphStub(); session.setProjectDependencyGraph( dependencyGraphStub ); session.setProjects( dependencyGraphStub.getSortedProjects() ); diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java index 16deedd33794..0317dd52dbb0 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java @@ -42,8 +42,6 @@ import org.apache.maven.project.DuplicateProjectException; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositorySystem; -import org.codehaus.plexus.MutablePlexusContainer; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; import org.codehaus.plexus.util.dag.CycleDetectedException; import org.junit.jupiter.api.Test; @@ -322,8 +320,7 @@ public void testValueExtractionFromSystemPropertiesWithMissingProject_WithDotNot assertEquals( "value", value ); } - @SuppressWarnings( "deprecation" ) - private static MavenSession createSession( PlexusContainer container, ArtifactRepository repo, Properties properties ) + private static MavenSession createSession( ArtifactRepository repo, Properties properties ) throws CycleDetectedException, DuplicateProjectException { MavenExecutionRequest request = new DefaultMavenExecutionRequest() @@ -332,7 +329,7 @@ private static MavenSession createSession( PlexusContainer container, ArtifactRe .setBaseDirectory( new File( "" ) ) .setLocalRepository( repo ); - return new MavenSession( container, request, new DefaultMavenExecutionResult(), Collections.emptyList() ); + return new MavenSession( request, new DefaultMavenExecutionResult(), Collections.emptyList() ); } @Test @@ -401,8 +398,7 @@ private ExpressionEvaluator createExpressionEvaluator( MavenProject project, Plu { ArtifactRepository repo = factory.createDefaultLocalRepository(); - MutablePlexusContainer container = (MutablePlexusContainer) getContainer(); - MavenSession session = createSession( container, repo, executionProperties ); + MavenSession session = createSession( repo, executionProperties ); session.setCurrentProject( project ); MojoDescriptor mojo = new MojoDescriptor(); diff --git a/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java index 4cf01cf87dc7..6245394dd65c 100644 --- a/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java +++ b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java @@ -38,14 +38,14 @@ public class DefaultLegacySupportTest { public void testSetSession() throws Exception { MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest(); - MavenSession m1 = new MavenSession(null, null, mavenExecutionRequest, null); + MavenSession m1 = new MavenSession(null, mavenExecutionRequest, null); defaultLegacySupport.setSession(m1); MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); - MavenSession m2 = new MavenSession(null, null, mavenExecutionRequest, null); + MavenSession m2 = new MavenSession(null, mavenExecutionRequest, null); defaultLegacySupport.setSession(m2); latch.countDown(); thread.join(); diff --git a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java index 785958e05401..01e31851126b 100644 --- a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java +++ b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java @@ -23,12 +23,12 @@ import java.util.Arrays; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.container.Container; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.model.building.ModelBuildingException; import org.apache.maven.model.building.ModelProblem; import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; -import org.codehaus.plexus.testing.PlexusTest; -import org.codehaus.plexus.PlexusContainer; import org.eclipse.aether.DefaultRepositoryCache; import org.eclipse.aether.DefaultRepositorySystemSession; import org.junit.jupiter.api.BeforeEach; @@ -38,7 +38,7 @@ /** * @author Jason van Zyl */ -@PlexusTest +@MavenTest public abstract class AbstractMavenProjectTestCase { protected ProjectBuilder projectBuilder; @@ -47,24 +47,17 @@ public abstract class AbstractMavenProjectTestCase protected RepositorySystem repositorySystem; @Inject - protected PlexusContainer container; - - public PlexusContainer getContainer() { - return container; - } + protected Container container; @BeforeEach public void setUp() throws Exception { - if ( getContainer().hasComponent( ProjectBuilder.class, "test" ) ) - { - projectBuilder = getContainer().lookup( ProjectBuilder.class, "test" ); - } - else + projectBuilder = container.lookup( ProjectBuilder.class, "test" ); + if ( projectBuilder == null ) { // default over to the main project builder... - projectBuilder = getContainer().lookup( ProjectBuilder.class ); + projectBuilder = container.lookup( ProjectBuilder.class ); } } diff --git a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java index 727f28de33e0..b89accfddaba 100644 --- a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java @@ -58,7 +58,7 @@ public class DefaultMavenProjectBuilderTest public void setUp() throws Exception { - projectBuilder = getContainer().lookup( ProjectBuilder.class ); + projectBuilder = container.lookup( ProjectBuilder.class ); } protected MavenProject getProject( Artifact pom, boolean allowStub ) diff --git a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java index ff7cc050f6a9..4e7d6454a8b2 100644 --- a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java @@ -28,7 +28,7 @@ import javax.inject.Inject; -import org.codehaus.plexus.testing.PlexusTest; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; @@ -54,7 +54,7 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; -@PlexusTest +@MavenTest public class PomConstructionTest { private static String BASE_DIR = "src/test"; diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java index fbe1a4e2b799..55358c901844 100644 --- a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java @@ -86,7 +86,7 @@ public void testBuildFromModelSource() configuration.setRepositorySession( mavenSession.getRepositorySession() ); ModelSource modelSource = new FileModelSource( pomFile ); ProjectBuildingResult result = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration ); + lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration ); assertNotNull( result.getProject().getParentFile() ); } @@ -101,7 +101,7 @@ public void testVersionlessManagedDependency() configuration.setRepositorySession( mavenSession.getRepositorySession() ); ProjectBuildingException e = assertThrows( ProjectBuildingException.class, - () -> getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ) ); + () -> lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ) ); assertThat( e.getMessage(), containsString( "[ERROR] 'dependencies.dependency.version' for org.apache.maven.its:a:jar is missing. " + "@ line 9, column 17" ) ); @@ -118,11 +118,11 @@ public void testResolveDependencies() configuration.setResolveDependencies( true ); // single project build entry point - ProjectBuildingResult result = getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ); + ProjectBuildingResult result = lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ); assertEquals( 1, result.getProject().getArtifacts().size() ); // multi projects build entry point List results = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( Collections.singletonList( pomFile ), false, + lookup( org.apache.maven.project.ProjectBuilder.class ).build( Collections.singletonList( pomFile ), false, configuration ); assertEquals( 1, results.size() ); MavenProject mavenProject = results.get( 0 ).getProject(); @@ -140,10 +140,10 @@ public void testDontResolveDependencies() configuration.setResolveDependencies( false ); // single project build entry point - ProjectBuildingResult result = getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ); + ProjectBuildingResult result = lookup( org.apache.maven.project.ProjectBuilder.class ).build( pomFile, configuration ); assertEquals( 0, result.getProject().getArtifacts().size() ); // multi projects build entry point - List results = getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( Collections.singletonList( pomFile ), false, configuration ); + List results = lookup( org.apache.maven.project.ProjectBuilder.class ).build( Collections.singletonList( pomFile ), false, configuration ); assertEquals( 1, results.size() ); MavenProject mavenProject = results.get( 0 ).getProject(); assertEquals( 0, mavenProject.getArtifacts().size() ); @@ -161,7 +161,7 @@ public void testReadModifiedPoms() throws Exception { MavenSession mavenSession = createMavenSession( null ); ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest(); configuration.setRepositorySession( mavenSession.getRepositorySession() ); - org.apache.maven.project.ProjectBuilder projectBuilder = getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ); + org.apache.maven.project.ProjectBuilder projectBuilder = lookup( org.apache.maven.project.ProjectBuilder.class ); File child = new File( tempDir.toFile(), "child/pom.xml" ); // build project once projectBuilder.build( child, configuration ); @@ -191,7 +191,7 @@ public void testReadErroneousMavenProjectContainsReference() configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); configuration.setRepositorySession( mavenSession.getRepositorySession() ); org.apache.maven.project.ProjectBuilder projectBuilder = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ); + lookup( org.apache.maven.project.ProjectBuilder.class ); // single project build entry point ProjectBuildingException ex1 = @@ -225,7 +225,7 @@ public void testReadInvalidPom() configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); configuration.setRepositorySession( mavenSession.getRepositorySession() ); org.apache.maven.project.ProjectBuilder projectBuilder = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ); + lookup( org.apache.maven.project.ProjectBuilder.class ); // single project build entry point Exception ex = assertThrows( Exception.class, () -> projectBuilder.build( pomFile, configuration ) ); @@ -254,7 +254,7 @@ public void testReadParentAndChildWithRegularVersionSetParentFile() configuration.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); configuration.setRepositorySession( mavenSession.getRepositorySession() ); org.apache.maven.project.ProjectBuilder projectBuilder = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ); + lookup( org.apache.maven.project.ProjectBuilder.class ); // read poms separately boolean parentFileWasFoundOnChild = false; @@ -344,7 +344,7 @@ public void testBuildFromModelSourceResolvesBasedir() configuration.setRepositorySession( mavenSession.getRepositorySession() ); ModelSource modelSource = new FileModelSource( pomFile ); ProjectBuildingResult result = - getContainer().lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration ); + lookup( org.apache.maven.project.ProjectBuilder.class ).build( modelSource, configuration ); assertEquals( pomFile.getAbsoluteFile(), result.getProject().getModel().getPomFile().getAbsoluteFile() ); int errors = 0; diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java index 709b88cba365..b2891c9ba777 100644 --- a/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java @@ -209,8 +209,8 @@ private ModelResolver newModelResolver() throws Exception final DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession(); repoSession.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) ); - return new ProjectModelResolver( repoSession, null, getContainer().lookup( RepositorySystem.class ), - getContainer().lookup( RemoteRepositoryManager.class ), + return new ProjectModelResolver( repoSession, null, container.lookup( RepositorySystem.class ), + container.lookup( RemoteRepositoryManager.class ), this.getRemoteRepositories(), ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT, null ); diff --git a/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java b/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java index 7d5150d4d6d4..a8db0f05bd1c 100644 --- a/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java +++ b/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java @@ -21,20 +21,20 @@ import javax.inject.Inject; +import org.apache.maven.container.Container; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.RepositorySystem; -import org.codehaus.plexus.testing.PlexusTest; -import org.codehaus.plexus.PlexusContainer; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -@PlexusTest +@MavenTest public class MavenMetadataSourceTest { @Inject private RepositorySystem repositorySystem; @Inject - PlexusContainer container; + Container container; @Test @Disabled diff --git a/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java b/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java index b6e987e2f613..2cf0b45eb092 100644 --- a/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java +++ b/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java @@ -19,8 +19,8 @@ * under the License. */ +import org.apache.maven.container.test.MavenTest; import org.apache.maven.rtinfo.RuntimeInformation; -import org.codehaus.plexus.testing.PlexusTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -30,7 +30,7 @@ import javax.inject.Inject; -@PlexusTest +@MavenTest public class DefaultRuntimeInformationTest { @Inject diff --git a/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java b/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java index e13382b53224..deb7493f3b05 100644 --- a/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java +++ b/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java @@ -24,6 +24,7 @@ import java.io.Reader; import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.model.Profile; import org.apache.maven.project.DefaultProjectBuilder; import org.apache.maven.project.DefaultProjectBuildingRequest; @@ -32,7 +33,6 @@ import org.apache.maven.repository.RepositorySystem; import org.apache.maven.repository.internal.MavenRepositorySystemUtils; import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader; -import org.codehaus.plexus.testing.PlexusTest; import org.codehaus.plexus.util.ReaderFactory; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.eclipse.aether.DefaultRepositorySystemSession; @@ -46,7 +46,7 @@ import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; import static org.junit.jupiter.api.Assertions.assertEquals; -@PlexusTest +@MavenTest public class PomConstructionWithSettingsTest { private static final String BASE_DIR = "src/test"; diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index 042ba4051d18..f76180b3eafc 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -19,7 +19,6 @@ * under the License. */ -import com.google.inject.AbstractModule; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.ParseException; @@ -44,6 +43,8 @@ import org.apache.maven.cli.transfer.ConsoleMavenTransferListener; import org.apache.maven.cli.transfer.QuietMavenTransferListener; import org.apache.maven.cli.transfer.Slf4jMavenTransferListener; +import org.apache.maven.container.Container; +import org.apache.maven.container.DefaultContainer; import org.apache.maven.eventspy.internal.EventSpyDispatcher; import org.apache.maven.exception.DefaultExceptionHandler; import org.apache.maven.exception.ExceptionHandler; @@ -56,6 +57,7 @@ import org.apache.maven.execution.MavenExecutionResult; import org.apache.maven.execution.ProfileActivation; import org.apache.maven.execution.ProjectActivation; +import org.apache.maven.execution.scope.internal.MojoExecutionScope; import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule; import org.apache.maven.extension.internal.CoreExports; import org.apache.maven.extension.internal.CoreExtensionEntry; @@ -66,21 +68,16 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.properties.internal.EnvironmentUtils; import org.apache.maven.properties.internal.SystemProperties; +import org.apache.maven.session.scope.internal.SessionScope; import org.apache.maven.session.scope.internal.SessionScopeModule; import org.apache.maven.shared.utils.logging.MessageBuilder; import org.apache.maven.shared.utils.logging.MessageUtils; import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest; import org.apache.maven.toolchain.building.ToolchainsBuilder; import org.apache.maven.toolchain.building.ToolchainsBuildingResult; -import org.codehaus.plexus.ContainerConfiguration; -import org.codehaus.plexus.DefaultContainerConfiguration; -import org.codehaus.plexus.DefaultPlexusContainer; -import org.codehaus.plexus.PlexusConstants; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.ClassWorld; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.classworlds.realm.NoSuchRealmException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.logging.LoggerManager; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; @@ -281,7 +278,7 @@ public int doMain( String[] args, String workingDirectory, PrintStream stdout, P // TODO need to externalize CliRequest public int doMain( CliRequest cliRequest ) { - PlexusContainer localContainer = null; + Container localContainer = null; try { initialize( cliRequest ); @@ -644,7 +641,7 @@ void properties( CliRequest cliRequest ) populateProperties( cliRequest.commandLine, cliRequest.systemProperties, cliRequest.userProperties ); } - PlexusContainer container( CliRequest cliRequest ) + Container container( CliRequest cliRequest ) throws Exception { if ( cliRequest.classWorld == null ) @@ -666,10 +663,6 @@ PlexusContainer container( CliRequest cliRequest ) ClassRealm containerRealm = setupContainerRealm( cliRequest.classWorld, coreRealm, extClassPath, extensions ); - ContainerConfiguration cc = new DefaultContainerConfiguration().setClassWorld( cliRequest.classWorld ) - .setRealm( containerRealm ).setClassPathScanning( PlexusConstants.SCANNING_INDEX ).setAutoWiring( true ) - .setJSR250Lifecycle( true ).setName( "maven" ); - Set exportedArtifacts = new HashSet<>( coreEntry.getExportedArtifacts() ); Set exportedPackages = new HashSet<>( coreEntry.getExportedPackages() ); for ( CoreExtensionEntry extension : extensions ) @@ -677,18 +670,11 @@ PlexusContainer container( CliRequest cliRequest ) exportedArtifacts.addAll( extension.getExportedArtifacts() ); exportedPackages.addAll( extension.getExportedPackages() ); } - final CoreExports exports = new CoreExports( containerRealm, exportedArtifacts, exportedPackages ); - DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule() - { - @Override - protected void configure() - { - bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory ); - bind( CoreExports.class ).toInstance( exports ); - } - } ); + Container container = new DefaultContainer( containerRealm ); + container.addComponent( ILoggerFactory.class, slf4jLoggerFactory ); + container.addComponent( CoreExports.class, exports ); // NOTE: To avoid inconsistencies, we'll use the TCCL exclusively for lookups container.setLookupRealm( null ); @@ -698,13 +684,15 @@ protected void configure() for ( CoreExtensionEntry extension : extensions ) { - container.discoverComponents( extension.getClassRealm(), new SessionScopeModule( container ), - new MojoExecutionScopeModule( container ) ); + container.discoverComponents( + extension.getClassRealm(), + new SessionScopeModule( container.lookup( SessionScope.class ) ), + new MojoExecutionScopeModule( container.lookup( MojoExecutionScope.class ) ) ); } customizeContainer( container ); - container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() ); + plexusLoggerManager.setThresholds( cliRequest.request.getLoggingLevel() ); eventSpyDispatcher = container.lookup( EventSpyDispatcher.class ); @@ -757,22 +745,8 @@ private List loadCoreExtensions( CliRequest cliRequest, Clas return Collections.emptyList(); } - ContainerConfiguration cc = new DefaultContainerConfiguration() // - .setClassWorld( cliRequest.classWorld ) // - .setRealm( containerRealm ) // - .setClassPathScanning( PlexusConstants.SCANNING_INDEX ) // - .setAutoWiring( true ) // - .setJSR250Lifecycle( true ) // - .setName( "maven" ); - - DefaultPlexusContainer container = new DefaultPlexusContainer( cc, new AbstractModule() - { - @Override - protected void configure() - { - bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory ); - } - } ); + Container container = new DefaultContainer( containerRealm ); + container.addComponent( ILoggerFactory.class, slf4jLoggerFactory ); try { @@ -780,7 +754,7 @@ protected void configure() container.setLoggerManager( plexusLoggerManager ); - container.getLoggerManager().setThresholds( cliRequest.request.getLoggingLevel() ); + plexusLoggerManager.setThresholds( cliRequest.request.getLoggingLevel() ); Thread.currentThread().setContextClassLoader( container.getContainerRealm() ); @@ -1809,12 +1783,11 @@ protected TransferListener getBatchTransferListener() return new Slf4jMavenTransferListener(); } - protected void customizeContainer( PlexusContainer container ) + protected void customizeContainer( Container container ) { } - protected ModelProcessor createModelProcessor( PlexusContainer container ) - throws ComponentLookupException + protected ModelProcessor createModelProcessor( Container container ) { return container.lookup( ModelProcessor.class ); } diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java index 9fada05db83b..246eb85ddcb3 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java @@ -33,11 +33,10 @@ import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.extension.internal.CoreExtensionEntry; import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory; +import org.apache.maven.container.Container; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver; -import org.codehaus.plexus.DefaultPlexusContainer; -import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.ClassWorld; import org.codehaus.plexus.classworlds.realm.ClassRealm; import org.codehaus.plexus.logging.Logger; @@ -68,12 +67,12 @@ public class BootstrapCoreExtensionManager @Inject public BootstrapCoreExtensionManager( Logger log, DefaultPluginDependenciesResolver pluginDependenciesResolver, DefaultRepositorySystemSessionFactory repositorySystemSessionFactory, - PlexusContainer container ) + Container container ) { this.log = log; this.pluginDependenciesResolver = pluginDependenciesResolver; this.repositorySystemSessionFactory = repositorySystemSessionFactory; - this.classWorld = ( (DefaultPlexusContainer) container ).getClassWorld(); + this.classWorld = container.getClassWorld(); this.parentRealm = container.getContainerRealm(); } diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java index 4191e8880a19..92c477404fe9 100644 --- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java +++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java @@ -41,7 +41,6 @@ import java.io.File; import java.io.PrintStream; import java.nio.charset.StandardCharsets; -import java.util.Collections; import java.util.List; import org.apache.commons.cli.CommandLine; @@ -51,6 +50,7 @@ import org.apache.commons.cli.ParseException; import org.apache.commons.cli.Parser; import org.apache.maven.Maven; +import org.apache.maven.container.Container; import org.apache.maven.eventspy.internal.EventSpyDispatcher; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.ProfileActivation; @@ -59,8 +59,6 @@ import org.apache.maven.shared.utils.logging.MessageUtils; import org.apache.maven.toolchain.building.ToolchainsBuildingRequest; import org.apache.maven.toolchain.building.ToolchainsBuildingResult; -import org.codehaus.plexus.DefaultPlexusContainer; -import org.codehaus.plexus.PlexusContainer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -383,12 +381,10 @@ public void testToolchainsBuildingEvents() throws Exception { final EventSpyDispatcher eventSpyDispatcherMock = mock(EventSpyDispatcher.class); MavenCli customizedMavenCli = new MavenCli() { @Override - protected void customizeContainer(PlexusContainer container) { + protected void customizeContainer(Container container) { super.customizeContainer(container); - container.addComponent(mock(Maven.class), "org.apache.maven.Maven"); - - ( (DefaultPlexusContainer) container ).addPlexusInjector( Collections.emptyList(), - binder -> binder.bind( EventSpyDispatcher.class ).toInstance( eventSpyDispatcherMock ) ); + container.addComponent( Maven.class, mock(Maven.class) ); + container.addComponent( EventSpyDispatcher.class, eventSpyDispatcherMock ); } }; diff --git a/maven-resolver-provider/pom.xml b/maven-resolver-provider/pom.xml index ad66af35375f..e09d13cbd287 100644 --- a/maven-resolver-provider/pom.xml +++ b/maven-resolver-provider/pom.xml @@ -38,6 +38,10 @@ under the License. org.apache.maven maven-model + + org.apache.maven + maven-container + org.apache.maven maven-model-builder @@ -97,6 +101,13 @@ under the License. true + + org.apache.maven + maven-container + tests + test-jar + test + org.codehaus.plexus plexus-testing diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java index 7660616c0528..80ee5d15776e 100644 --- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java +++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java @@ -23,10 +23,10 @@ import javax.inject.Inject; +import org.apache.maven.container.Container; +import org.apache.maven.container.test.MavenTest; import org.apache.maven.repository.internal.util.ConsoleRepositoryListener; import org.apache.maven.repository.internal.util.ConsoleTransferListener; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.testing.PlexusTest; import org.eclipse.aether.DefaultRepositorySystemSession; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; @@ -36,14 +36,14 @@ import static org.codehaus.plexus.testing.PlexusExtension.getTestFile; -@PlexusTest +@MavenTest public abstract class AbstractRepositoryTestCase { @Inject protected RepositorySystem system; @Inject - protected PlexusContainer container; + protected Container container; protected RepositorySystemSession session; @@ -54,11 +54,12 @@ public void setUp() session = newMavenRepositorySystemSession( system ); } - protected PlexusContainer getContainer() { - return container; + protected T lookup( Class role ) + { + return container.lookup( role ); } - public static RepositorySystemSession newMavenRepositorySystemSession(RepositorySystem system ) + public static RepositorySystemSession newMavenRepositorySystemSession( RepositorySystem system ) { DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java index a68a42f0db37..cd45fe36d94e 100644 --- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java +++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java @@ -42,7 +42,7 @@ public void testMng5459() throws Exception { // prepare - DefaultArtifactDescriptorReader reader = (DefaultArtifactDescriptorReader) getContainer().lookup( ArtifactDescriptorReader.class ); + DefaultArtifactDescriptorReader reader = (DefaultArtifactDescriptorReader) lookup( ArtifactDescriptorReader.class ); RepositoryEventDispatcher eventDispatcher = mock( RepositoryEventDispatcher.class ); diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java index 1a4d444de4c0..1523f69f5d4d 100644 --- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java +++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java @@ -26,7 +26,6 @@ import org.apache.maven.model.Parent; import org.apache.maven.model.resolution.ModelResolver; import org.apache.maven.model.resolution.UnresolvableModelException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.eclipse.aether.impl.ArtifactResolver; import org.eclipse.aether.impl.RemoteRepositoryManager; import org.eclipse.aether.impl.VersionRangeResolver; @@ -199,11 +198,11 @@ public void testResolveDependencySuccessfullyResolvesExistingDependencyUsingHigh assertEquals( "1.0", dependency.getVersion() ); } - private ModelResolver newModelResolver() throws ComponentLookupException, MalformedURLException + private ModelResolver newModelResolver() throws MalformedURLException { return new DefaultModelResolver( this.session, null, this.getClass().getName(), - getContainer().lookup( ArtifactResolver.class ), getContainer().lookup( VersionRangeResolver.class ), - getContainer().lookup( RemoteRepositoryManager.class ), + lookup( ArtifactResolver.class ), lookup( VersionRangeResolver.class ), + lookup( RemoteRepositoryManager.class ), Arrays.asList( newTestRepository() ) ); } diff --git a/pom.xml b/pom.xml index c1bb3036b7d4..f6aaee1f83a5 100644 --- a/pom.xml +++ b/pom.xml @@ -82,6 +82,7 @@ under the License. maven-bom maven-plugin-api maven-builder-support + maven-container maven-model maven-model-builder maven-model-transform @@ -453,6 +454,12 @@ under the License. ${junitVersion} test + + org.junit.jupiter + junit-jupiter-api + ${junitVersion} + test +