diff options
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java')
-rw-r--r-- | framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java new file mode 100644 index 00000000..57d374fd --- /dev/null +++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java @@ -0,0 +1,360 @@ +package org.apache.maven; + +/* + * 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.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.InvalidRepositoryException; +import org.apache.maven.artifact.repository.ArtifactRepository; +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.model.Build; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Exclusion; +import org.apache.maven.model.Model; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.Repository; +import org.apache.maven.model.RepositoryPolicy; +import org.apache.maven.project.DefaultProjectBuildingRequest; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.repository.RepositorySystem; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.codehaus.plexus.ContainerConfiguration; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusTestCase; +import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.util.FileUtils; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; +import org.eclipse.aether.repository.LocalRepository; + +public abstract class AbstractCoreMavenComponentTestCase + extends PlexusTestCase +{ + @Requirement + protected RepositorySystem repositorySystem; + + @Requirement + protected org.apache.maven.project.ProjectBuilder projectBuilder; + + protected void setUp() + throws Exception + { + repositorySystem = lookup( RepositorySystem.class ); + projectBuilder = lookup( org.apache.maven.project.ProjectBuilder.class ); + } + + @Override + protected void tearDown() + throws Exception + { + repositorySystem = null; + projectBuilder = null; + super.tearDown(); + } + + abstract protected String getProjectsDirectory(); + + protected File getProject( String name ) + throws Exception + { + File source = new File( new File( getBasedir(), getProjectsDirectory() ), name ); + File target = new File( new File( getBasedir(), "target" ), name ); + FileUtils.copyDirectoryStructureIfModified( source, target ); + return new File( target, "pom.xml" ); + } + + /** + * We need to customize the standard Plexus container with the plugin discovery listener which + * is what looks for the META-INF/maven/plugin.xml resources that enter the system when a Maven + * plugin is loaded. + * + * We also need to customize the Plexus container with a standard plugin discovery listener + * which is the MavenPluginCollector. When a Maven plugin is discovered the MavenPluginCollector + * collects the plugin descriptors which are found. + */ + protected void customizeContainerConfiguration( ContainerConfiguration containerConfiguration ) + { + containerConfiguration.setAutoWiring( true ).setClassPathScanning( PlexusConstants.SCANNING_INDEX ); + } + + protected MavenExecutionRequest createMavenExecutionRequest( File pom ) + throws Exception + { + MavenExecutionRequest request = new DefaultMavenExecutionRequest() + .setPom( pom ) + .setProjectPresent( true ) + .setShowErrors( true ) + .setPluginGroups( Arrays.asList( "org.apache.maven.plugins" ) ) + .setLocalRepository( getLocalRepository() ) + .setRemoteRepositories( getRemoteRepositories() ) + .setPluginArtifactRepositories( getPluginArtifactRepositories() ) + .setGoals( Arrays.asList( "package" ) ); + + return request; + } + + // layer the creation of a project builder configuration with a request, but this will need to be + // a Maven subclass because we don't want to couple maven to the project builder which we need to + // separate. + protected MavenSession createMavenSession( File pom ) + throws Exception + { + return createMavenSession( pom, new Properties() ); + } + + protected MavenSession createMavenSession( File pom, Properties executionProperties ) + throws Exception + { + MavenExecutionRequest request = createMavenExecutionRequest( pom ); + + ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest() + .setLocalRepository( request.getLocalRepository() ) + .setRemoteRepositories( request.getRemoteRepositories() ) + .setPluginArtifactRepositories( request.getPluginArtifactRepositories() ) + .setSystemProperties( executionProperties ); + + MavenProject project = null; + + if ( pom != null ) + { + project = projectBuilder.build( pom, configuration ).getProject(); + } + else + { + project = createStubMavenProject(); + project.setRemoteArtifactRepositories( request.getRemoteRepositories() ); + project.setPluginArtifactRepositories( request.getPluginArtifactRepositories() ); + } + + initRepoSession( configuration ); + + MavenSession session = + new MavenSession( getContainer(), configuration.getRepositorySession(), request, + new DefaultMavenExecutionResult() ); + session.setProjects( Arrays.asList( project ) ); + + return session; + } + + protected void initRepoSession( ProjectBuildingRequest request ) + throws Exception + { + File localRepoDir = new File( request.getLocalRepository().getBasedir() ); + LocalRepository localRepo = new LocalRepository( localRepoDir ); + DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); + session.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( session, localRepo ) ); + request.setRepositorySession( session ); + } + + protected MavenProject createStubMavenProject() + { + Model model = new Model(); + model.setGroupId( "org.apache.maven.test" ); + model.setArtifactId( "maven-test" ); + model.setVersion( "1.0" ); + return new MavenProject( model ); + } + + protected List<ArtifactRepository> getRemoteRepositories() + throws InvalidRepositoryException + { + File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile(); + + RepositoryPolicy policy = new RepositoryPolicy(); + policy.setEnabled( true ); + policy.setChecksumPolicy( "ignore" ); + policy.setUpdatePolicy( "always" ); + + Repository repository = new Repository(); + repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID ); + repository.setUrl( "file://" + repoDir.toURI().getPath() ); + repository.setReleases( policy ); + repository.setSnapshots( policy ); + + return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) ); + } + + protected List<ArtifactRepository> getPluginArtifactRepositories() + throws InvalidRepositoryException + { + return getRemoteRepositories(); + } + + protected ArtifactRepository getLocalRepository() + throws InvalidRepositoryException + { + File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile(); + + return repositorySystem.createLocalRepository( repoDir ); + } + + protected class ProjectBuilder + { + private MavenProject project; + + public ProjectBuilder( MavenProject project ) + { + this.project = project; + } + + public ProjectBuilder( String groupId, String artifactId, String version ) + { + Model model = new Model(); + model.setModelVersion( "4.0.0" ); + model.setGroupId( groupId ); + model.setArtifactId( artifactId ); + model.setVersion( version ); + model.setBuild( new Build() ); + project = new MavenProject( model ); + } + + public ProjectBuilder setGroupId( String groupId ) + { + project.setGroupId( groupId ); + return this; + } + + public ProjectBuilder setArtifactId( String artifactId ) + { + project.setArtifactId( artifactId ); + return this; + } + + public ProjectBuilder setVersion( String version ) + { + project.setVersion( version ); + return this; + } + + // Dependencies + // + public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope ) + { + return addDependency( groupId, artifactId, version, scope, (Exclusion)null ); + } + + public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, Exclusion exclusion ) + { + return addDependency( groupId, artifactId, version, scope, null, exclusion ); + } + + public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath ) + { + return addDependency( groupId, artifactId, version, scope, systemPath, null ); + } + + public ProjectBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath, Exclusion exclusion ) + { + Dependency d = new Dependency(); + d.setGroupId( groupId ); + d.setArtifactId( artifactId ); + d.setVersion( version ); + d.setScope( scope ); + + if ( systemPath != null && scope.equals( Artifact.SCOPE_SYSTEM ) ) + { + d.setSystemPath( systemPath ); + } + + if ( exclusion != null ) + { + d.addExclusion( exclusion ); + } + + project.getDependencies().add( d ); + + return this; + } + + // Plugins + // + public ProjectBuilder addPlugin( Plugin plugin ) + { + project.getBuildPlugins().add( plugin ); + return this; + } + + public MavenProject get() + { + return project; + } + } + + protected class PluginBuilder + { + private Plugin plugin; + + public PluginBuilder( String groupId, String artifactId, String version ) + { + plugin = new Plugin(); + plugin.setGroupId( groupId ); + plugin.setArtifactId( artifactId ); + plugin.setVersion( version ); + } + + // Dependencies + // + public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, Exclusion exclusion ) + { + return addDependency( groupId, artifactId, version, scope, exclusion ); + } + + public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath ) + { + return addDependency( groupId, artifactId, version, scope, systemPath, null ); + } + + public PluginBuilder addDependency( String groupId, String artifactId, String version, String scope, String systemPath, Exclusion exclusion ) + { + Dependency d = new Dependency(); + d.setGroupId( groupId ); + d.setArtifactId( artifactId ); + d.setVersion( version ); + d.setScope( scope ); + + if ( systemPath != null && scope.equals( Artifact.SCOPE_SYSTEM ) ) + { + d.setSystemPath( systemPath ); + } + + if ( exclusion != null ) + { + d.addExclusion( exclusion ); + } + + plugin.getDependencies().add( d ); + + return this; + } + + public Plugin get() + { + return plugin; + } + } +} |