You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/07/05 12:43:25 UTC

[maven-install-plugin] branch full-resolver created (now a32f8c2)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a change to branch full-resolver
in repository https://gitbox.apache.org/repos/asf/maven-install-plugin.git


      at a32f8c2  Make plugin simpler

This branch includes the following new commits:

     new a32f8c2  Make plugin simpler

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-install-plugin] 01/01: Make plugin simpler

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch full-resolver
in repository https://gitbox.apache.org/repos/asf/maven-install-plugin.git

commit a32f8c26840314b069846e92ed7c7ec1a0152f25
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Jul 5 14:43:08 2022 +0200

    Make plugin simpler
---
 .../maven/plugins/install/AbstractInstallMojo.java | 115 +--------------
 .../maven/plugins/install/InstallFileMojo.java     | 160 ++++++---------------
 .../apache/maven/plugins/install/InstallMojo.java  |  18 +++
 .../apache/maven/plugins/install/Installer.java    | 143 ++++++++++++++++++
 .../maven/plugins/install/InstallFileMojoTest.java |   5 +
 .../maven/plugins/install/InstallMojoTest.java     |   3 +-
 6 files changed, 217 insertions(+), 227 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/install/AbstractInstallMojo.java b/src/main/java/org/apache/maven/plugins/install/AbstractInstallMojo.java
index 7143461..28aa4f3 100644
--- a/src/main/java/org/apache/maven/plugins/install/AbstractInstallMojo.java
+++ b/src/main/java/org/apache/maven/plugins/install/AbstractInstallMojo.java
@@ -19,24 +19,11 @@ package org.apache.maven.plugins.install;
  * under the License.
  */
 
-import java.io.File;
-
-import org.apache.maven.RepositoryUtils;
-import org.apache.maven.artifact.Artifact;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.artifact.ProjectArtifact;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.installation.InstallRequest;
-import org.eclipse.aether.installation.InstallationException;
-import org.eclipse.aether.util.artifact.SubArtifact;
 
 /**
  * Common fields for installation mojos.
@@ -49,105 +36,9 @@ public abstract class AbstractInstallMojo
     @Component
     protected RepositorySystem repositorySystem;
 
+    @Component
+    protected Installer installer;
+
     @Parameter( defaultValue = "${session}", required = true, readonly = true )
     protected MavenSession session;
-
-    /**
-     * Gets the path of the specified artifact within the local repository. Note that the returned path need not exist
-     * (yet).
-     *
-     * @param artifact The artifact whose local repo path should be determined, must not be <code>null</code>.
-     * @return The absolute path to the artifact when installed, never <code>null</code>.
-     */
-    protected File getLocalRepoFile( Artifact artifact )
-    {
-        String path = session.getRepositorySession().getLocalRepositoryManager()
-                .getPathForLocalArtifact( RepositoryUtils.toArtifact( artifact ) );
-        return new File( session.getRepositorySession().getLocalRepository().getBasedir(), path );
-    }
-
-    /**
-     * Gets the path of the specified artifact metadata within the local repository. Note that the returned path need
-     * not exist (yet).
-     *
-     * @param metadata The artifact metadata whose local repo path should be determined, must not be <code>null</code>.
-     * @return The absolute path to the artifact metadata when installed, never <code>null</code>.
-     */
-    protected File getLocalRepoFile( ProjectArtifactMetadata metadata )
-    {
-        DefaultArtifact pomArtifact = new DefaultArtifact(
-                metadata.getGroupId(),
-                metadata.getArtifactId(),
-                "",
-                "pom",
-                metadata.getBaseVersion() );
-
-        String path = session.getRepositorySession().getLocalRepositoryManager().getPathForLocalArtifact(
-                pomArtifact );
-        return new File( session.getRepositorySession().getLocalRepository().getBasedir(), path );
-    }
-
-    protected void installProject( MavenProject project )
-            throws MojoFailureException, MojoExecutionException
-    {
-        try
-        {
-            InstallRequest request = new InstallRequest();
-            Artifact artifact = project.getArtifact();
-            String packaging = project.getPackaging();
-            File pomFile = project.getFile();
-            boolean isPomArtifact = "pom".equals( packaging );
-
-            if ( pomFile != null )
-            {
-                request.addArtifact( RepositoryUtils.toArtifact( new ProjectArtifact( project ) ) );
-            }
-
-            if ( !isPomArtifact )
-            {
-                File file = artifact.getFile();
-
-                // Here, we have a temporary solution to MINSTALL-3 (isDirectory() is true if it went through compile
-                // but not package). We are designing in a proper solution for Maven 2.1
-                if ( file != null && file.isFile() )
-                {
-                    org.eclipse.aether.artifact.Artifact mainArtifact = RepositoryUtils.toArtifact( artifact );
-                    request.addArtifact( mainArtifact );
-
-                    for ( Object metadata : artifact.getMetadataList() )
-                    {
-                        if ( metadata instanceof ProjectArtifactMetadata )
-                        {
-                            org.eclipse.aether.artifact.Artifact pomArtifact =
-                                    new SubArtifact( mainArtifact, "", "pom" );
-                            pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
-                            request.addArtifact( pomArtifact );
-                        }
-                    }
-                }
-                else if ( !project.getAttachedArtifacts().isEmpty() )
-                {
-                    throw new MojoExecutionException( "The packaging plugin for this project did not assign "
-                            + "a main file to the project but it has attachments. Change packaging to 'pom'." );
-                }
-                else
-                {
-                    throw new MojoExecutionException( "The packaging for this project did not assign "
-                            + "a file to the build artifact" );
-                }
-            }
-
-            for ( Artifact attached : project.getAttachedArtifacts() )
-            {
-                getLog().debug( "Attaching for install: " + attached.getId() );
-                request.addArtifact( RepositoryUtils.toArtifact( attached ) );
-            }
-
-            repositorySystem.install( session.getRepositorySession(), request );
-        }
-        catch ( InstallationException e )
-        {
-            throw new MojoExecutionException( e.getMessage(), e );
-        }
-    }
 }
diff --git a/src/main/java/org/apache/maven/plugins/install/InstallFileMojo.java b/src/main/java/org/apache/maven/plugins/install/InstallFileMojo.java
index c6d527d..5591631 100644
--- a/src/main/java/org/apache/maven/plugins/install/InstallFileMojo.java
+++ b/src/main/java/org/apache/maven/plugins/install/InstallFileMojo.java
@@ -32,28 +32,14 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
-import org.apache.maven.model.building.ModelBuildingException;
-import org.apache.maven.model.building.ModelSource;
-import org.apache.maven.model.building.StringModelSource;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectHelper;
-import org.apache.maven.project.ProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.artifact.ProjectArtifactMetadata;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.xml.XmlStreamReader;
@@ -61,8 +47,16 @@ import org.codehaus.plexus.util.xml.XmlStreamWriter;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.eclipse.aether.DefaultRepositoryCache;
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.ArtifactType;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.artifact.DefaultArtifactType;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.installation.InstallationException;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.util.artifact.SubArtifact;
 
 /**
  * Installs a file in the local repository.
@@ -161,21 +155,7 @@ public class InstallFileMojo
     @Parameter( property = "localRepositoryPath" )
     private File localRepositoryPath;
 
-    /**
-     * Used for attaching the artifacts to install to the project.
-     */
-    @Component
-    private MavenProjectHelper projectHelper;
-
-    /**
-     * Used for creating the project to which the artifacts to install will be attached.
-     */
-    @Component
-    private ProjectBuilder projectBuilder;
-
-    /**
-     * @see org.apache.maven.plugin.Mojo#execute()
-     */
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
@@ -186,6 +166,7 @@ public class InstallFileMojo
             throw new MojoFailureException( message );
         }
 
+        RepositorySystemSession repositorySystemSession = session.getRepositorySession();
         if ( localRepositoryPath != null )
         {
             // "clone" repository session and replace localRepository
@@ -202,8 +183,7 @@ public class InstallFileMojo
             LocalRepositoryManager localRepositoryManager = repositorySystem.newLocalRepositoryManager( newSession,
                     new LocalRepository( localRepositoryPath, contentType ) );
             newSession.setLocalRepositoryManager( localRepositoryManager );
-            this.session = new MavenSession(
-                    session.getContainer(), newSession, session.getRequest(), session.getResult() );
+            repositorySystemSession = newSession;
         }
 
         File temporaryPom = null;
@@ -218,65 +198,54 @@ public class InstallFileMojo
             pomFile = temporaryPom;
         }
 
-        MavenProject project = createMavenProject();
-        
-        // We need to set a new ArtifactHandler otherwise 
-        // the extension will be set to the packaging type
-        // which is sometimes wrong.
-        DefaultArtifactHandler ah = new DefaultArtifactHandler( packaging );
-        ah.setExtension( FileUtils.getExtension( file.getName() ) );
-
-        project.getArtifact().setArtifactHandler( ah );
-        Artifact artifact = project.getArtifact();
-
-        if ( file.equals( getLocalRepoFile( artifact ) ) )
+        if ( groupId == null || artifactId == null || version == null || packaging == null )
         {
-            throw new MojoFailureException( "Cannot install artifact. "
-                + "Artifact is already in the local repository." + LS + LS + "File in question is: " + file + LS );
+            throw new MojoExecutionException( "The artifact information is incomplete: 'groupId', 'artifactId', "
+                    + "'version' and 'packaging' are required." );
         }
 
-        if ( classifier == null )
+        InstallRequest installRequest = new InstallRequest();
+
+        ArtifactType artifactType = session.getRepositorySession().getArtifactTypeRegistry().get( packaging );
+        if ( artifactType == null )
         {
-            artifact.setFile( file );
-            if ( "pom".equals( packaging ) )
-            {
-                project.setFile( file );
-            }
+            artifactType = new DefaultArtifactType(
+                    packaging, FileUtils.getExtension( file.getName() ), classifier, "none"
+            );
         }
-        else
+
+        Artifact mainArtifact = new DefaultArtifact(
+                groupId,
+                artifactId,
+                classifier,
+                null,
+                version,
+                artifactType
+        ).setFile( file );
+        installRequest.addArtifact( mainArtifact );
+
+        File artifactLocalFile = installer.getLocalRepositoryFile( session.getRepositorySession(), mainArtifact );
+        File pomLocalFile = installer.getPomLocalRepositoryFile( session.getRepositorySession(), mainArtifact );
+
+        if ( file.equals( artifactLocalFile ) )
         {
-            projectHelper.attachArtifact( project, packaging, classifier, file );
+            throw new MojoFailureException( "Cannot install artifact. "
+                + "Artifact is already in the local repository." + LS + LS + "File in question is: " + file + LS );
         }
 
         if ( !"pom".equals( packaging ) )
         {
             if ( pomFile != null )
             {
-                if ( classifier == null )
-                {
-                    artifact.addMetadata( new ProjectArtifactMetadata( artifact, pomFile ) );
-                }
-                else
-                {
-                    project.setFile( pomFile );
-                }
+                installRequest.addArtifact( new SubArtifact( mainArtifact, "", "pom", pomFile ) );
             }
             else
             {
-                temporaryPom = generatePomFile();
-                ProjectArtifactMetadata pomMetadata = new ProjectArtifactMetadata( artifact, temporaryPom );
-                if ( Boolean.TRUE.equals( generatePom )
-                    || ( generatePom == null && !getLocalRepoFile( pomMetadata ).exists() ) )
+                if ( Boolean.TRUE.equals( generatePom ) || ( generatePom == null && !pomLocalFile.exists() ) )
                 {
+                    temporaryPom = generatePomFile();
                     getLog().debug( "Installing generated POM" );
-                    if ( classifier == null )
-                    {
-                        artifact.addMetadata( pomMetadata );
-                    }
-                    else
-                    {
-                        project.setFile( temporaryPom );
-                    }
+                    installRequest.addArtifact( new SubArtifact( mainArtifact, "", "pom", temporaryPom ) );
                 }
                 else if ( generatePom == null )
                 {
@@ -287,19 +256,19 @@ public class InstallFileMojo
 
         if ( sources != null )
         {
-            projectHelper.attachArtifact( project, "jar", "sources", sources );
+            installRequest.addArtifact( new SubArtifact( mainArtifact, "sources", "jar", sources ) );
         }
 
         if ( javadoc != null )
         {
-            projectHelper.attachArtifact( project, "jar", "javadoc", javadoc );
+            installRequest.addArtifact( new SubArtifact( mainArtifact, "javadoc", "jar", javadoc ) );
         }
 
         try
         {
-            installProject( project );
+            repositorySystem.install( repositorySystemSession, installRequest );
         }
-        catch ( Exception e )
+        catch ( InstallationException e )
         {
             throw new MojoExecutionException( e.getMessage(), e );
         }
@@ -313,43 +282,6 @@ public class InstallFileMojo
         }
     }
 
-    /**
-     * Creates a Maven project in-memory from the user-supplied groupId, artifactId and version. When a classifier is
-     * supplied, the packaging must be POM because the project with only have attachments. This project serves as basis
-     * to attach the artifacts to install to.
-     * 
-     * @return The created Maven project, never <code>null</code>.
-     * @throws MojoExecutionException When the model of the project could not be built.
-     * @throws MojoFailureException When building the project failed.
-     */
-    private MavenProject createMavenProject()
-        throws MojoExecutionException, MojoFailureException
-    {
-        if ( groupId == null || artifactId == null || version == null || packaging == null )
-        {
-            throw new MojoExecutionException( "The artifact information is incomplete: 'groupId', 'artifactId', "
-                + "'version' and 'packaging' are required." );
-        }
-        ModelSource modelSource = new StringModelSource( "<project><modelVersion>4.0.0</modelVersion><groupId>"
-            + groupId + "</groupId><artifactId>" + artifactId + "</artifactId><version>" + version
-            + "</version><packaging>" + ( classifier == null ? packaging : "pom" ) + "</packaging></project>" );
-        ProjectBuildingRequest pbr = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() );
-        pbr.setProcessPlugins( false );
-        try
-        {
-            return projectBuilder.build( modelSource, pbr ).getProject();
-        }
-        catch ( ProjectBuildingException e )
-        {
-            if ( e.getCause() instanceof ModelBuildingException )
-            {
-                throw new MojoExecutionException( "The artifact information is not valid:" + LS
-                    + e.getCause().getMessage() );
-            }
-            throw new MojoFailureException( "Unable to create the project.", e );
-        }
-    }
-
     private File readingPomFromJarFile()
         throws MojoExecutionException
     {
diff --git a/src/main/java/org/apache/maven/plugins/install/InstallMojo.java b/src/main/java/org/apache/maven/plugins/install/InstallMojo.java
index 51d15ce..f01d6c9 100644
--- a/src/main/java/org/apache/maven/plugins/install/InstallMojo.java
+++ b/src/main/java/org/apache/maven/plugins/install/InstallMojo.java
@@ -29,6 +29,7 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.installation.InstallationException;
 
 /**
  * Installs the project's main artifact, and any other artifacts attached by other plugins in the lifecycle, to the
@@ -92,6 +93,7 @@ public class InstallMojo
         return pluginContext.containsKey( INSTALL_PROCESSED_MARKER );
     }
 
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
@@ -147,6 +149,22 @@ public class InstallMojo
         return true;
     }
 
+    private void installProject( MavenProject project ) throws MojoExecutionException, MojoFailureException
+    {
+        try
+        {
+            repositorySystem.install( session.getRepositorySession(), installer.processProject( project ) );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            throw new MojoFailureException( e.getMessage(), e );
+        }
+        catch ( InstallationException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+    }
+
     public void setSkip( boolean skip )
     {
         this.skip = skip;
diff --git a/src/main/java/org/apache/maven/plugins/install/Installer.java b/src/main/java/org/apache/maven/plugins/install/Installer.java
new file mode 100644
index 0000000..66568a2
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugins/install/Installer.java
@@ -0,0 +1,143 @@
+package org.apache.maven.plugins.install;
+
+/*
+ * 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 javax.inject.Named;
+import javax.inject.Singleton;
+
+import java.io.File;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.ProjectArtifact;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.util.artifact.SubArtifact;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Installer component.
+ */
+@Singleton
+@Named
+public class Installer
+{
+    private final Logger logger = LoggerFactory.getLogger( getClass() );
+
+    /**
+     * Gets the path of the specified artifact within the local repository. Note that the returned path need not exist
+     * (yet).
+     *
+     * @param artifact The artifact whose local repo path should be determined, must not be <code>null</code>.
+     * @return The absolute path to the artifact when installed, never <code>null</code>.
+     */
+    public File getLocalRepositoryFile( RepositorySystemSession session, Artifact artifact )
+    {
+        String path = session.getLocalRepositoryManager().getPathForLocalArtifact( artifact );
+        return new File( session.getLocalRepository().getBasedir(), path );
+    }
+
+    /**
+     * Gets the path of the specified artifact POM within the local repository. Note that the returned path need
+     * not exist (yet).
+     *
+     * @param artifact The artifact whose POM local repo path should be determined, must not be <code>null</code>.
+     * @return The absolute path to the artifact POM when installed, never <code>null</code>.
+     */
+    public File getPomLocalRepositoryFile( RepositorySystemSession session, Artifact artifact )
+    {
+        SubArtifact pomArtifact = new SubArtifact( artifact, "", "pom" );
+        String path = session.getLocalRepositoryManager().getPathForLocalArtifact( pomArtifact );
+        return new File( session.getLocalRepository().getBasedir(), path );
+    }
+
+    /**
+     * Processes passed in {@link MavenProject} and produces {@link InstallRequest} out of it.
+     *
+     * @throws IllegalArgumentException if project is badly set up.
+     */
+    public InstallRequest processProject( MavenProject project )
+    {
+        InstallRequest request = new InstallRequest();
+        org.apache.maven.artifact.Artifact mavenMainArtifact = project.getArtifact();
+        String packaging = project.getPackaging();
+        File pomFile = project.getFile();
+        boolean isPomArtifact = "pom".equals( packaging );
+        boolean pomArtifactAttached = false;
+
+        if ( pomFile != null )
+        {
+            request.addArtifact( RepositoryUtils.toArtifact( new ProjectArtifact( project ) ) );
+            pomArtifactAttached = true;
+        }
+
+        if ( !isPomArtifact )
+        {
+            File file = mavenMainArtifact.getFile();
+            if ( file != null && file.isFile() )
+            {
+                Artifact mainArtifact = RepositoryUtils.toArtifact( mavenMainArtifact );
+                request.addArtifact( mainArtifact );
+
+                if ( !pomArtifactAttached )
+                {
+                    for ( Object metadata : mavenMainArtifact.getMetadataList() )
+                    {
+                        if ( metadata instanceof ProjectArtifactMetadata )
+                        {
+                            request.addArtifact( new SubArtifact(
+                                    mainArtifact,
+                                    "",
+                                    "pom"
+                            ).setFile( ( (ProjectArtifactMetadata) metadata ).getFile() ) );
+                            pomArtifactAttached = true;
+                        }
+                    }
+                }
+            }
+            else if ( !project.getAttachedArtifacts().isEmpty() )
+            {
+                throw new IllegalArgumentException( "The packaging plugin for this project did not assign "
+                        + "a main file to the project but it has attachments. Change packaging to 'pom'." );
+            }
+            else
+            {
+                throw new IllegalArgumentException( "The packaging for this project did not assign "
+                        + "a file to the build artifact" );
+            }
+        }
+
+        if ( !pomArtifactAttached )
+        {
+            throw new IllegalArgumentException( "The POM could not be attached" );
+        }
+
+        for ( org.apache.maven.artifact.Artifact attached : project.getAttachedArtifacts() )
+        {
+            logger.debug( "Attaching for install: " + attached.getId() );
+            request.addArtifact( RepositoryUtils.toArtifact( attached ) );
+        }
+
+        return request;
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugins/install/InstallFileMojoTest.java b/src/test/java/org/apache/maven/plugins/install/InstallFileMojoTest.java
index c135d95..9ed4b6e 100644
--- a/src/test/java/org/apache/maven/plugins/install/InstallFileMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/install/InstallFileMojoTest.java
@@ -31,9 +31,11 @@ import org.apache.maven.project.ProjectBuildingRequest;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.xml.XmlStreamReader;
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifactType;
 import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
+import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -291,6 +293,9 @@ public class InstallFileMojoTest
                         repositorySession, new LocalRepository( LOCAL_REPO )
                 )
         );
+        DefaultArtifactTypeRegistry stereotypes = new DefaultArtifactTypeRegistry();
+        stereotypes.add( new DefaultArtifactType( "pom" ) );
+        repositorySession.setArtifactTypeRegistry( stereotypes );
         ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
         buildingRequest.setRepositorySession( repositorySession );
         when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest );
diff --git a/src/test/java/org/apache/maven/plugins/install/InstallMojoTest.java b/src/test/java/org/apache/maven/plugins/install/InstallMojoTest.java
index 6fea289..6da54a8 100644
--- a/src/test/java/org/apache/maven/plugins/install/InstallMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/install/InstallMojoTest.java
@@ -32,6 +32,7 @@ import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.plugins.install.stubs.AttachedArtifactStub0;
@@ -214,7 +215,7 @@ public class InstallMojoTest
 
             fail( "Did not throw mojo execution exception" );
         }
-        catch ( MojoExecutionException e )
+        catch ( MojoFailureException e )
         {
             //expected
         }