diff --git a/src/it/sign-release-with-excludes/pom.xml b/src/it/sign-release-with-excludes/pom.xml
new file mode 100644
index 0000000..dad59b2
--- /dev/null
+++ b/src/it/sign-release-with-excludes/pom.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+ 4.0.0
+
+ org.apache.maven.its.gpg.srwe
+ test
+ 1.0
+ jar
+
+
+ Tests the exclusion of signature files while signing.
+
+
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.0.2
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ @project.version@
+
+ TEST
+
+
+
+ sign-artifacts
+
+ sign
+
+
+
+
+ resign-artifacts
+
+ sign
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-install-plugin
+ 2.2
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.1
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.2
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.0.4
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.3.1
+
+
+
+
+
diff --git a/src/it/sign-release-with-excludes/verify.bsh b/src/it/sign-release-with-excludes/verify.bsh
new file mode 100644
index 0000000..b464464
--- /dev/null
+++ b/src/it/sign-release-with-excludes/verify.bsh
@@ -0,0 +1,58 @@
+
+/*
+ * 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.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.List;
+import org.codehaus.plexus.util.FileUtils;
+
+File artifactDir = new File( localRepositoryPath, "org/apache/maven/its/gpg/srwe/test/1.0" );
+
+String[] expectedFiles = {
+ "_remote.repositories",
+ "test-1.0.pom",
+ "test-1.0.pom.asc",
+ "test-1.0.jar",
+ "test-1.0.jar.asc",
+ "test-1.0-sources.jar",
+ "test-1.0-sources.jar.asc",
+};
+
+for ( File file : artifactDir.listFiles() )
+{
+ String fileName = file.getName();
+ System.out.println( "Checking if file is expected: " + fileName );
+
+ boolean expected = false;
+ for ( String expectedFile : expectedFiles )
+ {
+ if ( expectedFile.equals( fileName ) )
+ {
+ expected = true;
+ break;
+ }
+ }
+
+ if ( !expected )
+ {
+ throw new Exception( "Unexpected file " + file );
+ }
+}
diff --git a/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java b/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
index cf9a06b..98b600a 100644
--- a/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
+++ b/src/main/java/org/apache/maven/plugins/gpg/GpgSignAttachedMojo.java
@@ -21,6 +21,7 @@
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -192,6 +193,12 @@ else if ( project.getAttachedArtifacts().isEmpty() )
File file = artifact.getFile();
+ if ( isExcluded( artifact ) )
+ {
+ getLog().debug( "Skipping generation of signature for excluded " + file );
+ continue;
+ }
+
getLog().debug( "Generating signature for " + file );
File signature = signer.generateSignatureForArtifact( file );
@@ -217,19 +224,24 @@ else if ( project.getAttachedArtifacts().isEmpty() )
/**
* Tests whether or not a name matches against at least one exclude pattern.
*
- * @param name The name to match. Must not be null
.
+ * @param artifact The artifact to match. Must not be null
.
* @return true
when the name matches against at least one exclude pattern, or false
* otherwise.
*/
- protected boolean isExcluded( String name )
+ protected boolean isExcluded( Artifact artifact )
{
+ final Path projectBasePath = project.getBasedir().toPath();
+ final Path artifactPath = artifact.getFile().toPath();
+ final String relativeArtifactPath = projectBasePath.relativize( artifactPath ).toString();
+
for ( String exclude : excludes )
{
- if ( SelectorUtils.matchPath( exclude, name ) )
+ if ( SelectorUtils.matchPath( exclude, relativeArtifactPath ) )
{
return true;
}
}
+
return false;
}