diff --git a/pom.xml b/pom.xml
index e0a5919..7e01980 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
   </parent>
 
   <artifactId>maven-gpg-plugin</artifactId>
-  <version>1.7-SNAPSHOT</version>
+  <version>3.0.0-SNAPSHOT</version>
   <packaging>maven-plugin</packaging>
 
   <name>Apache Maven GPG Plugin</name>
@@ -62,7 +62,7 @@
   </distributionManagement>
 
   <properties>
-    <mavenVersion>2.2.1</mavenVersion>
+    <mavenVersion>3.0</mavenVersion>
     <javaVersion>7</javaVersion>
   </properties>
 
@@ -74,7 +74,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-project</artifactId>
+      <artifactId>maven-core</artifactId>
       <version>${mavenVersion}</version>
     </dependency>
     <dependency>
@@ -84,12 +84,17 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-repository-metadata</artifactId>
+      <artifactId>maven-model</artifactId>
       <version>${mavenVersion}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-model</artifactId>
+      <artifactId>maven-model-builder</artifactId>
+      <version>${mavenVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-settings</artifactId>
       <version>${mavenVersion}</version>
     </dependency>
     <dependency>
@@ -98,6 +103,25 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-artifact-transfer</artifactId>
+      <version>0.12.0</version>
+    </dependency>
+    <dependency>
+      <!-- org.eclipse.aether.util.artifact.SubArtifact -->
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+      <version>1.4.1</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <!-- org.sonatype.aether.util.artifact.SubArtifact -->
+      <groupId>org.sonatype.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>1.7</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
       <version>3.1.0</version>
@@ -114,6 +138,12 @@
       <version>4.12</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <version>1.3</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
@@ -131,6 +161,42 @@
         </plugin>
       </plugins>
     </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>3.2.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <artifactSet>
+                <includes>
+                  <include>org.apache.maven.resolver:maven-resolver-util</include>
+                  <include>org.sonatype.aether:aether-util</include>
+                </includes>
+              </artifactSet>
+              <filters>
+                <filter>
+                  <artifact>org.apache.maven.resolver:maven-resolver-util</artifact>
+                  <includes>
+                    <include>org/eclipse/aether/util/artifact/SubArtifact.class</include>
+                  </includes>
+                </filter>
+                <filter>
+                  <artifact>org.sonatype.aether:aether-util</artifact>
+                  <includes>
+                    <include>org/sonatype/aether/util/artifact/SubArtifact.class</include>
+                  </includes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
   </build>
 
   <profiles>
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java b/src/main/java/org/apache/maven/plugins/gpg/AbstractGpgMojo.java
similarity index 99%
rename from src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java
rename to src/main/java/org/apache/maven/plugins/gpg/AbstractGpgMojo.java
index 61fa02f..fdf33d5 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/AbstractGpgMojo.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java b/src/main/java/org/apache/maven/plugins/gpg/AbstractGpgSigner.java
similarity index 99%
rename from src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java
rename to src/main/java/org/apache/maven/plugins/gpg/AbstractGpgSigner.java
index 68c5ba7..2de3d32 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/AbstractGpgSigner.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AscArtifactMetadata.java b/src/main/java/org/apache/maven/plugins/gpg/AscArtifactMetadata.java
similarity index 85%
rename from src/main/java/org/apache/maven/plugin/gpg/AscArtifactMetadata.java
rename to src/main/java/org/apache/maven/plugins/gpg/AscArtifactMetadata.java
index c4b95b5..e3cbbca 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AscArtifactMetadata.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/AscArtifactMetadata.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -34,12 +34,12 @@
  *
  */
 public class AscArtifactMetadata
-    extends AbstractArtifactMetadata
+    extends AbstractArtifactMetadata implements org.apache.maven.shared.transfer.metadata.ArtifactMetadata  
 {
 
-    File file;
+    private final File file;
 
-    boolean isPom;
+    private final boolean isPom;
 
     public AscArtifactMetadata( Artifact artifact, File file, boolean isPom )
     {
@@ -97,11 +97,21 @@
     @Override
     public void merge( ArtifactMetadata metadata )
     {
-        AscArtifactMetadata m = (AscArtifactMetadata) metadata;
-        if ( !m.file.equals( file ) )
+        merge( (AscArtifactMetadata) metadata );
+    }
+
+    @Override
+    public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
+    {
+        merge( (AscArtifactMetadata) metadata );
+    }
+    
+    private void merge( AscArtifactMetadata metadata )
+    {
+        if ( !metadata.file.equals( file ) )
         {
             throw new IllegalStateException( "Cannot add two different pieces of metadata for: " + getKey() );
-        }
+        } 
     }
 
     @Override
@@ -134,4 +144,10 @@
         return getFilename();
     }
 
+    @Override
+    public File getFile()
+    {
+        return file;
+    }
+
 }
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AttachedSignedArtifact.java b/src/main/java/org/apache/maven/plugins/gpg/AttachedSignedArtifact.java
similarity index 96%
rename from src/main/java/org/apache/maven/plugin/gpg/AttachedSignedArtifact.java
rename to src/main/java/org/apache/maven/plugins/gpg/AttachedSignedArtifact.java
index 964e16f..ff1243b 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AttachedSignedArtifact.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/AttachedSignedArtifact.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -358,11 +358,4 @@
     {
         return delegate.compareTo( o );
     }
-
-    @Override
-    public ArtifactMetadata getMetadata( Class<?> metadataClass )
-    {
-        // TODO Auto-generated method stub
-        return delegate.getMetadata( metadataClass );
-    }
 }
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java b/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
similarity index 99%
rename from src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java
rename to src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
index b631eba..706d658 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java b/src/main/java/org/apache/maven/plugins/gpg/GpgSigner.java
similarity index 99%
rename from src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
rename to src/main/java/org/apache/maven/plugins/gpg/GpgSigner.java
index a46bc2c..65dd396 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/GpgSigner.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgVersion.java b/src/main/java/org/apache/maven/plugins/gpg/GpgVersion.java
similarity index 98%
rename from src/main/java/org/apache/maven/plugin/gpg/GpgVersion.java
rename to src/main/java/org/apache/maven/plugins/gpg/GpgVersion.java
index b1da2cf..6e64577 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgVersion.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/GpgVersion.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgVersionParser.java b/src/main/java/org/apache/maven/plugins/gpg/GpgVersionParser.java
similarity index 98%
rename from src/main/java/org/apache/maven/plugin/gpg/GpgVersionParser.java
rename to src/main/java/org/apache/maven/plugins/gpg/GpgVersionParser.java
index 56b3084..12adb71 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgVersionParser.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/GpgVersionParser.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java b/src/main/java/org/apache/maven/plugins/gpg/SignAndDeployFileMojo.java
similarity index 85%
rename from src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java
rename to src/main/java/org/apache/maven/plugins/gpg/SignAndDeployFileMojo.java
index 9b0838e..37e747d 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/SignAndDeployFileMojo.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -24,21 +24,29 @@
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.deployer.ArtifactDeployer;
-import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.InputLocation;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblemCollector;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.model.validation.ModelValidator;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
@@ -46,9 +54,10 @@
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.artifact.ProjectArtifactMetadata;
-import org.apache.maven.project.validation.ModelValidationResult;
-import org.apache.maven.project.validation.ModelValidator;
+import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployer;
+import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerException;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
@@ -134,12 +143,6 @@
     private boolean generatePom;
 
     /**
-     * Whether to deploy snapshots with a unique version or not.
-     */
-    @Parameter( property = "uniqueVersion", defaultValue = "true" )
-    private boolean uniqueVersion;
-
-    /**
      * URL where the artifact will be deployed. <br/>
      * ie ( file:///C:/m2-repo or scp://host.com/path/to/repo )
      */
@@ -170,24 +173,12 @@
     private ArtifactRepository localRepository;
 
     /**
-     * Map that contains the layouts.
-     */
-    @Component( role = ArtifactRepositoryLayout.class )
-    private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
-
-    /**
      * Component used to create an artifact
      */
     @Component
     private ArtifactFactory artifactFactory;
 
     /**
-     * Component used to create a repository
-     */
-    @Component
-    private ArtifactRepositoryFactory repositoryFactory;
-
-    /**
      * The component used to validate the user-supplied artifact coordinates.
      */
     @Component
@@ -202,6 +193,12 @@
     private MavenProject project;
 
     /**
+     * @since 3.0.0
+     */
+    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    private MavenSession session;
+
+    /**
      * Used for attaching the source and javadoc jars to the project.
      *
      * @since 1.3
@@ -304,14 +301,8 @@
             throw new MojoFailureException( file.getPath() + " not found." );
         }
 
-        ArtifactRepositoryLayout layout = repositoryLayouts.get( repositoryLayout );
-        if ( layout == null )
-        {
-            throw new MojoFailureException( "Invalid repository layout: " + repositoryLayout );
-        }
-
-        ArtifactRepository deploymentRepository =
-            repositoryFactory.createDeploymentArtifactRepository( repositoryId, url, layout, uniqueVersion );
+        
+        ArtifactRepository deploymentRepository = createDeploymentArtifactRepository( repositoryId, url );
 
         if ( StringUtils.isEmpty( deploymentRepository.getProtocol() ) )
         {
@@ -325,6 +316,7 @@
         {
             throw new MojoFailureException( "Cannot deploy artifact from the local repository: " + file );
         }
+        artifact.setFile( file );
 
         File fileSig = signer.generateSignatureForArtifact( file );
         ArtifactMetadata metadata = new AscArtifactMetadata( artifact, fileSig, false );
@@ -356,9 +348,9 @@
 
         try
         {
-            deploy( file, artifact, deploymentRepository, localRepository );
+            deploy( artifact, deploymentRepository );
         }
-        catch ( ArtifactDeploymentException e )
+        catch ( ArtifactDeployerException e )
         {
             throw new MojoExecutionException( e.getMessage(), e );
         }
@@ -465,9 +457,9 @@
             attached = new AttachedSignedArtifact( attached, new AscArtifactMetadata( attached, fileSig, false ) );
             try
             {
-                deploy( attached.getFile(), attached, deploymentRepository, localRepository );
+                deploy(  attached, deploymentRepository );
             }
-            catch ( ArtifactDeploymentException e )
+            catch ( ArtifactDeployerException e )
             {
                 throw new MojoExecutionException( "Error deploying attached artifact " + attached.getFile() + ": "
                     + e.getMessage(), e );
@@ -592,12 +584,23 @@
     {
         Model model = generateModel();
 
-        ModelValidationResult result = modelValidator.validate( model );
+        ModelBuildingRequest request = new DefaultModelBuildingRequest()
+                        .setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
+                    
+        List<String> result = new ArrayList<>();
 
-        if ( result.getMessageCount() > 0 )
+        SimpleModelProblemCollector problemCollector = new SimpleModelProblemCollector( result );
+
+        modelValidator.validateEffectiveModel( model, request, problemCollector );
+
+        if ( !result.isEmpty() )
         {
-            throw new MojoFailureException( "The artifact information is incomplete or not valid:\n"
-                + result.render( "  " ) );
+            StringBuilder msg = new StringBuilder( "The artifact information is incomplete or not valid:\n" );
+            for ( String e : result )
+            {
+                msg.append( " - " + e + '\n' );
+            }
+            throw new MojoFailureException( msg.toString() );
         }
     }
 
@@ -631,12 +634,14 @@
      * @param localRepository the local repository to install into
      * @throws ArtifactDeploymentException if an error occurred deploying the artifact
      */
-    protected void deploy( File source, Artifact artifact, ArtifactRepository deploymentRepository,
-                           ArtifactRepository localRepository )
-        throws ArtifactDeploymentException
+    protected void deploy( Artifact artifact,
+                           ArtifactRepository deploymentRepository )
+        throws ArtifactDeployerException
     {
+        final ProjectBuildingRequest buildingRequest = session.getProjectBuildingRequest();
+        
         int retryFailedDeploymentCount = Math.max( 1, Math.min( 10, this.retryFailedDeploymentCount ) );
-        ArtifactDeploymentException exception = null;
+        ArtifactDeployerException exception = null;
         for ( int count = 0; count < retryFailedDeploymentCount; count++ )
         {
             try
@@ -647,7 +652,8 @@
                     getLog().info( "Retrying deployment attempt " + ( count + 1 ) + " of " + retryFailedDeploymentCount );
                     // CHECKSTYLE_ON: LineLength
                 }
-                deployer.deploy( source, artifact, deploymentRepository, localRepository );
+                deployer.deploy( buildingRequest, deploymentRepository, Collections.singletonList( artifact ) );
+
                 for ( Object o : artifact.getMetadataList() )
                 {
                     ArtifactMetadata metadata = (ArtifactMetadata) o;
@@ -656,7 +662,7 @@
                 exception = null;
                 break;
             }
-            catch ( ArtifactDeploymentException e )
+            catch ( ArtifactDeployerException e )
             {
                 if ( count + 1 < retryFailedDeploymentCount )
                 {
@@ -674,4 +680,31 @@
             throw exception;
         }
     }
+    
+    protected ArtifactRepository createDeploymentArtifactRepository( String id, String url )
+    {
+        return new MavenArtifactRepository( id, url, new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(),
+                                            new ArtifactRepositoryPolicy() );
+    }
+
+    private static class SimpleModelProblemCollector
+        implements ModelProblemCollector
+    {
+
+        private final List<String> result;
+
+        SimpleModelProblemCollector( List<String> result )
+        {
+            this.result = result;
+        }
+
+        public void add( Severity severity, String message, InputLocation location, Exception cause )
+        {
+            if ( !ModelProblem.Severity.WARNING.equals( severity ) )
+            {
+                result.add( message );
+            }
+        }
+
+    }
 }
diff --git a/src/main/java/org/apache/maven/plugin/gpg/SigningBundle.java b/src/main/java/org/apache/maven/plugins/gpg/SigningBundle.java
similarity index 97%
rename from src/main/java/org/apache/maven/plugin/gpg/SigningBundle.java
rename to src/main/java/org/apache/maven/plugins/gpg/SigningBundle.java
index 97100d2..fd474b1 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/SigningBundle.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/SigningBundle.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
diff --git a/src/test/java/org/apache/maven/plugin/gpg/GpgVersionConsumerTest.java b/src/test/java/org/apache/maven/plugins/gpg/GpgVersionConsumerTest.java
similarity index 91%
rename from src/test/java/org/apache/maven/plugin/gpg/GpgVersionConsumerTest.java
rename to src/test/java/org/apache/maven/plugins/gpg/GpgVersionConsumerTest.java
index cae0ea1..b7b2b0f 100644
--- a/src/test/java/org/apache/maven/plugin/gpg/GpgVersionConsumerTest.java
+++ b/src/test/java/org/apache/maven/plugins/gpg/GpgVersionConsumerTest.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -22,7 +22,7 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-import org.apache.maven.plugin.gpg.GpgVersionParser.GpgVersionConsumer;
+import org.apache.maven.plugins.gpg.GpgVersionParser.GpgVersionConsumer;
 import org.junit.Test;
 
 public class GpgVersionConsumerTest
diff --git a/src/test/java/org/apache/maven/plugin/gpg/GpgVersionTest.java b/src/test/java/org/apache/maven/plugins/gpg/GpgVersionTest.java
similarity index 93%
rename from src/test/java/org/apache/maven/plugin/gpg/GpgVersionTest.java
rename to src/test/java/org/apache/maven/plugins/gpg/GpgVersionTest.java
index d7d4652..fb6bf47 100644
--- a/src/test/java/org/apache/maven/plugin/gpg/GpgVersionTest.java
+++ b/src/test/java/org/apache/maven/plugins/gpg/GpgVersionTest.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.gpg;
+package org.apache.maven.plugins.gpg;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -21,6 +21,7 @@
 
 import static org.junit.Assert.assertTrue;
 
+import org.apache.maven.plugins.gpg.GpgVersion;
 import org.junit.Test;
 
 public class GpgVersionTest
