Author: rfscholte Date: Wed Jun 8 21:23:54 2016 New Revision: 1747455 URL: http://svn.apache.org/viewvc?rev=1747455&view=rev Log: [MINVOKER-204] Upgrade to Maven3 plugin Introduce repositoryManager for localRepository related interaction
Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java Modified: maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java?rev=1747455&r1=1747454&r2=1747455&view=diff ============================================================================== --- maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java (original) +++ maven/plugins/trunk/maven-invoker-plugin/src/main/java/org/apache/maven/plugin/invoker/InstallMojo.java Wed Jun 8 21:23:54 2016 @@ -28,7 +28,6 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; @@ -48,7 +47,9 @@ import org.apache.maven.plugins.annotati import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.install.ArtifactInstaller; +import org.apache.maven.shared.repository.RepositoryManager; import org.codehaus.plexus.util.FileUtils; /** @@ -73,6 +74,9 @@ public class InstallMojo */ @Component private ArtifactInstaller installer; + + @Component + private RepositoryManager repositoryManager; /** * The component used to create artifacts. @@ -97,7 +101,8 @@ public class InstallMojo * possibly broken artifacts, it is strongly recommended to use an isolated repository for the integration tests * (e.g. <code>${project.build.directory}/it-repo</code>). */ - @Parameter( property = "invoker.localRepositoryPath" ) + @Parameter( property = "invoker.localRepositoryPath", + defaultValue = "${session.localRepository.basedir}", required = true ) private File localRepositoryPath; /** @@ -177,6 +182,8 @@ public class InstallMojo @Component private ArtifactMetadataSource artifactMetadataSource; + private ProjectBuildingRequest projectBuildingRequest; + /** * Performs this mojo's tasks. * @@ -191,16 +198,16 @@ public class InstallMojo return; } - ArtifactRepository testRepository = createTestRepository(); + createTestRepository(); installedArtifacts = new HashSet<String>(); copiedArtifacts = new HashSet<String>(); - installProjectDependencies( project, reactorProjects, testRepository ); - installProjectParents( project, testRepository ); - installProjectArtifacts( project, testRepository ); + installProjectDependencies( project, reactorProjects ); + installProjectParents( project ); + installProjectArtifacts( project ); - installExtraArtifacts( testRepository, extraArtifacts ); + installExtraArtifacts( extraArtifacts ); } /** @@ -212,50 +219,31 @@ public class InstallMojo * @return The local repository for the integration tests, never <code>null</code>. * @throws MojoExecutionException If the repository could not be created. */ - private ArtifactRepository createTestRepository() + private void createTestRepository() throws MojoExecutionException { - ArtifactRepository testRepository = localRepository; - - if ( localRepositoryPath != null ) + + if ( !localRepositoryPath.exists() && !localRepositoryPath.mkdirs() ) { - try - { - if ( !localRepositoryPath.exists() && !localRepositoryPath.mkdirs() ) - { - throw new IOException( "Failed to create directory: " + localRepositoryPath ); - } - - testRepository = - repositoryFactory.createArtifactRepository( localRepository.getId(), - localRepositoryPath.toURL().toExternalForm(), - localRepository.getLayout(), - localRepository.getSnapshots(), - localRepository.getReleases() ); - } - catch ( Exception e ) - { - throw new MojoExecutionException( "Failed to create local repository: " + localRepositoryPath, e ); - } + throw new MojoExecutionException( "Failed to create directory: " + localRepositoryPath ); } - - return testRepository; + projectBuildingRequest = + repositoryManager.setLocalRepositoryBasedir( session.getProjectBuildingRequest(), localRepositoryPath ); } /** * Installs the specified artifact to the local repository. Note: This method should only be used for artifacts that * originate from the current (reactor) build. Artifacts that have been grabbed from the user's local repository - * should be installed to the test repository via {@link #copyArtifact(File, Artifact, ArtifactRepository)}. + * should be installed to the test repository via {@link #copyArtifact(File, Artifact)}. * * @param file The file associated with the artifact, must not be <code>null</code>. This is in most cases the value * of <code>artifact.getFile()</code> with the exception of the main artifact from a project with * packaging "pom". Projects with packaging "pom" have no main artifact file. They have however artifact * metadata (e.g. site descriptors) which needs to be installed. * @param artifact The artifact to install, must not be <code>null</code>. - * @param testRepository The local repository to install the artifact to, must not be <code>null</code>. * @throws MojoExecutionException If the artifact could not be installed (e.g. has no associated file). */ - private void installArtifact( File file, Artifact artifact, ArtifactRepository testRepository ) + private void installArtifact( File file, Artifact artifact ) throws MojoExecutionException { try @@ -272,7 +260,7 @@ public class InstallMojo if ( installedArtifacts.add( artifact.getId() ) ) { artifact.setFile( file ); - installer.install( session.getProjectBuildingRequest(), new File( testRepository.getBasedir() ), + installer.install( session.getProjectBuildingRequest(), localRepositoryPath, Collections.singletonList( artifact ) ); } else @@ -288,17 +276,16 @@ public class InstallMojo /** * Installs the specified artifact to the local repository. This method serves basically the same purpose as - * {@link #installArtifact(File, Artifact, ArtifactRepository)} but is meant for artifacts that have been resolved + * {@link #installArtifact(File, Artifact)} but is meant for artifacts that have been resolved * from the user's local repository (and not the current build outputs). The subtle difference here is that * artifacts from the repository have already undergone transformations and these manipulations should not be redone * by the artifact installer. For this reason, this method performs plain copy operations to install the artifacts. * * @param file The file associated with the artifact, must not be <code>null</code>. * @param artifact The artifact to install, must not be <code>null</code>. - * @param testRepository The local repository to install the artifact to, must not be <code>null</code>. * @throws MojoExecutionException If the artifact could not be installed (e.g. has no associated file). */ - private void copyArtifact( File file, Artifact artifact, ArtifactRepository testRepository ) + private void copyArtifact( File file, Artifact artifact ) throws MojoExecutionException { try @@ -314,7 +301,9 @@ public class InstallMojo if ( copiedArtifacts.add( artifact.getId() ) ) { - File destination = new File( testRepository.getBasedir(), testRepository.pathOf( artifact ) ); + File destination = + new File( localRepositoryPath, + repositoryManager.getPathForLocalArtifact( projectBuildingRequest, artifact ) ); getLog().debug( "Installing " + file + " to " + destination ); @@ -347,29 +336,28 @@ public class InstallMojo * Installs the main artifact and any attached artifacts of the specified project to the local repository. * * @param mvnProject The project whose artifacts should be installed, must not be <code>null</code>. - * @param testRepository The local repository to install the artifacts to, must not be <code>null</code>. * @throws MojoExecutionException If any artifact could not be installed. */ - private void installProjectArtifacts( MavenProject mvnProject, ArtifactRepository testRepository ) + private void installProjectArtifacts( MavenProject mvnProject ) throws MojoExecutionException { try { // Install POM (usually attached as metadata but that happens only as a side effect of the Install Plugin) - installProjectPom( mvnProject, testRepository ); + installProjectPom( mvnProject ); // Install the main project artifact (if the project has one, e.g. has no "pom" packaging) Artifact mainArtifact = mvnProject.getArtifact(); if ( mainArtifact.getFile() != null ) { - installArtifact( mainArtifact.getFile(), mainArtifact, testRepository ); + installArtifact( mainArtifact.getFile(), mainArtifact ); } // Install any attached project artifacts Collection<Artifact> attachedArtifacts = (Collection<Artifact>) mvnProject.getAttachedArtifacts(); for ( Artifact attachedArtifact : attachedArtifacts ) { - installArtifact( attachedArtifact.getFile(), attachedArtifact, testRepository ); + installArtifact( attachedArtifact.getFile(), attachedArtifact ); } } catch ( Exception e ) @@ -383,10 +371,9 @@ public class InstallMojo * from the reactor must be installed or the forked IT builds will fail when using a clean repository. * * @param mvnProject The project whose parent POMs should be installed, must not be <code>null</code>. - * @param testRepository The local repository to install the POMs to, must not be <code>null</code>. * @throws MojoExecutionException If any POM could not be installed. */ - private void installProjectParents( MavenProject mvnProject, ArtifactRepository testRepository ) + private void installProjectParents( MavenProject mvnProject ) throws MojoExecutionException { try @@ -395,10 +382,10 @@ public class InstallMojo { if ( parent.getFile() == null ) { - copyParentPoms( parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), testRepository ); + copyParentPoms( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() ); break; } - installProjectPom( parent, testRepository ); + installProjectPom( parent ); } } catch ( Exception e ) @@ -411,10 +398,9 @@ public class InstallMojo * Installs the POM of the specified project to the local repository. * * @param mvnProject The project whose POM should be installed, must not be <code>null</code>. - * @param testRepository The local repository to install the POM to, must not be <code>null</code>. * @throws MojoExecutionException If the POM could not be installed. */ - private void installProjectPom( MavenProject mvnProject, ArtifactRepository testRepository ) + private void installProjectPom( MavenProject mvnProject ) throws MojoExecutionException { try @@ -430,7 +416,7 @@ public class InstallMojo artifactFactory.createProjectArtifact( mvnProject.getGroupId(), mvnProject.getArtifactId(), mvnProject.getVersion() ); } - installArtifact( mvnProject.getFile(), pomArtifact, testRepository ); + installArtifact( mvnProject.getFile(), pomArtifact ); } catch ( Exception e ) { @@ -444,11 +430,9 @@ public class InstallMojo * * @param mvnProject The project whose dependent projects should be installed, must not be <code>null</code>. * @param reactorProjects The set of projects in the reactor build, must not be <code>null</code>. - * @param testRepository The local repository to install the POMs to, must not be <code>null</code>. * @throws MojoExecutionException If any dependency could not be installed. */ - private void installProjectDependencies( MavenProject mvnProject, Collection<MavenProject> reactorProjects, - ArtifactRepository testRepository ) + private void installProjectDependencies( MavenProject mvnProject, Collection<MavenProject> reactorProjects ) throws MojoExecutionException { // keep track if we have passed mvnProject in reactorProjects @@ -498,7 +482,7 @@ public class InstallMojo // copy dependencies that where resolved from the local repo for ( Artifact artifact : dependencyArtifacts ) { - copyArtifact( artifact, testRepository ); + copyArtifact( artifact ); } // install dependencies that were resolved from the reactor @@ -506,8 +490,8 @@ public class InstallMojo { MavenProject dependencyProject = projects.get( projectId ); - installProjectArtifacts( dependencyProject, testRepository ); - installProjectParents( dependencyProject, testRepository ); + installProjectArtifacts( dependencyProject ); + installProjectParents( dependencyProject ); } } catch ( Exception e ) @@ -516,10 +500,10 @@ public class InstallMojo } } - private void copyArtifact( Artifact artifact, ArtifactRepository testRepository ) + private void copyArtifact( Artifact artifact ) throws MojoExecutionException { - copyPoms( artifact, testRepository ); + copyPoms( artifact ); Artifact depArtifact = artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact.getArtifactId(), @@ -528,10 +512,10 @@ public class InstallMojo File artifactFile = artifact.getFile(); - copyArtifact( artifactFile, depArtifact, testRepository ); + copyArtifact( artifactFile, depArtifact ); } - private void copyPoms( Artifact artifact, ArtifactRepository testRepository ) + private void copyPoms( Artifact artifact ) throws MojoExecutionException { Artifact pomArtifact = @@ -542,8 +526,8 @@ public class InstallMojo if ( pomFile.isFile() ) { - copyArtifact( pomFile, pomArtifact, testRepository ); - copyParentPoms( pomFile, testRepository ); + copyArtifact( pomFile, pomArtifact ); + copyParentPoms( pomFile ); } } @@ -551,17 +535,16 @@ public class InstallMojo * Installs all parent POMs of the specified POM file that are available in the local repository. * * @param pomFile The path to the POM file whose parents should be installed, must not be <code>null</code>. - * @param testRepository The local repository to install the POMs to, must not be <code>null</code>. * @throws MojoExecutionException If any (existing) parent POM could not be installed. */ - private void copyParentPoms( File pomFile, ArtifactRepository testRepository ) + private void copyParentPoms( File pomFile ) throws MojoExecutionException { Model model = PomUtils.loadPom( pomFile ); Parent parent = model.getParent(); if ( parent != null ) { - copyParentPoms( parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), testRepository ); + copyParentPoms( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() ); } } @@ -571,10 +554,9 @@ public class InstallMojo * @param groupId The group id of the POM which should be installed, must not be <code>null</code>. * @param artifactId The artifact id of the POM which should be installed, must not be <code>null</code>. * @param version The version of the POM which should be installed, must not be <code>null</code>. - * @param testRepository The local repository to install the POMs to, must not be <code>null</code>. * @throws MojoExecutionException If any (existing) parent POM could not be installed. */ - private void copyParentPoms( String groupId, String artifactId, String version, ArtifactRepository testRepository ) + private void copyParentPoms( String groupId, String artifactId, String version ) throws MojoExecutionException { Artifact pomArtifact = artifactFactory.createProjectArtifact( groupId, artifactId, version ); @@ -588,12 +570,12 @@ public class InstallMojo File pomFile = new File( localRepository.getBasedir(), localRepository.pathOf( pomArtifact ) ); if ( pomFile.isFile() ) { - copyArtifact( pomFile, pomArtifact, testRepository ); - copyParentPoms( pomFile, testRepository ); + copyArtifact( pomFile, pomArtifact ); + copyParentPoms( pomFile ); } } - private void installExtraArtifacts( ArtifactRepository testRepository, String[] extraArtifacts ) + private void installExtraArtifacts( String[] extraArtifacts ) throws MojoExecutionException { if ( extraArtifacts == null ) @@ -652,12 +634,12 @@ public class InstallMojo { artifact = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier ); - copyPoms( artifact, testRepository ); + copyPoms( artifact ); } - for ( Artifact arrArtifact : (Set<Artifact>) arr.getArtifacts() ) + for ( Artifact arrArtifact : arr.getArtifacts() ) { - copyArtifact( arrArtifact, testRepository ); + copyArtifact( arrArtifact ); } } catch ( Exception e )