diff --git a/pom.xml b/pom.xml
index e086c3ad..76338c68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,7 +72,7 @@ under the License.
true
8
- 2.2.0
+ 2.3.0
3.6.3
1.7.5
3.4.0
diff --git a/src/it/projects/dependency-sets/massembly-832/pom.xml b/src/it/projects/dependency-sets/massembly-832/pom.xml
new file mode 100644
index 00000000..cd4d54f3
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-832/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+ 4.0.0
+
+ org.apache.maven.plugin.assembly.test
+ it-project-parent
+ 1
+
+
+ test
+ massembly-832
+ pom
+ 1
+
+
+ org.postgresql
+ postgresql
+ 42.7.7
+
+
+ com.mysql
+ mysql-connector-j
+ 9.3.0
+ true
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ assembly
+ package
+
+ single
+
+
+
+ src/main/assembly/bin.xml
+
+
+
+
+
+
+
+
+
diff --git a/src/it/projects/dependency-sets/massembly-832/src/main/assembly/bin.xml b/src/it/projects/dependency-sets/massembly-832/src/main/assembly/bin.xml
new file mode 100644
index 00000000..0276e7de
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-832/src/main/assembly/bin.xml
@@ -0,0 +1,36 @@
+
+
+ bin
+
+ dir
+
+ false
+
+
+ false
+
+ false
+ false
+
+
+
diff --git a/src/it/projects/dependency-sets/massembly-832/verify.groovy b/src/it/projects/dependency-sets/massembly-832/verify.groovy
new file mode 100644
index 00000000..1bc74854
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-832/verify.groovy
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+def expectedFilenames = [
+ "checker-qual-3.49.3.jar",
+ "postgresql-42.7.7.jar"
+]
+
+File assemblyBasedir = new File( basedir, "target/massembly-832-1-bin/" )
+
+assert assemblyBasedir.listFiles().length == expectedFilenames.size()
+
+for ( fileName in expectedFilenames )
+{
+ File file = new File( assemblyBasedir, fileName )
+ assert file.isFile() // exists and is file
+}
+
+// defined set vs listed set: same cardinality and all present: OK
+
+return true
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
index a19293ef..76517a55 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTask.java
@@ -302,6 +302,9 @@ Set resolveDependencyArtifacts(final DependencySet dependencySet)
final ArtifactFilter filter = new ArtifactIncludeFilterTransformer().transform(scopeFilter);
+ final ArtifactFilter optionalFilter =
+ artifact -> !artifact.isOptional() || dependencySet.isUseOptionalDependencies();
+
FilterUtils.filterArtifacts(
dependencyArtifacts,
dependencySet.getIncludes(),
@@ -309,7 +312,8 @@ Set resolveDependencyArtifacts(final DependencySet dependencySet)
dependencySet.isUseStrictFiltering(),
dependencySet.isUseTransitiveFiltering(),
LOGGER,
- filter);
+ filter,
+ optionalFilter);
return dependencyArtifacts;
}
diff --git a/src/main/mdo/assembly-component.mdo b/src/main/mdo/assembly-component.mdo
index 3c1d15ac..4c65eb67 100644
--- a/src/main/mdo/assembly-component.mdo
+++ b/src/main/mdo/assembly-component.mdo
@@ -553,6 +553,15 @@
build should be included in this dependency set. Default value is false. (Since 2.2)
]]>
+
+ useOptionalDependencies
+ 2.3.0+
+ boolean
+ true
+
+ Determines whether optional dependencies should be included in this dependency set.
+
+
useTransitiveDependencies
1.1.0+
diff --git a/src/main/mdo/assembly.mdo b/src/main/mdo/assembly.mdo
index 7372a208..4856f952 100644
--- a/src/main/mdo/assembly.mdo
+++ b/src/main/mdo/assembly.mdo
@@ -671,6 +671,15 @@
build should be included in this dependency set. (Since 2.2-beta-1)
]]>
+
+ useOptionalDependencies
+ 2.3.0+
+ boolean
+ true
+
+ Determines whether optional dependencies should be included in this dependency set.
+
+
useTransitiveDependencies
1.1.0+
diff --git a/src/test/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTaskTest.java b/src/test/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTaskTest.java
index 463449f3..1e487929 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTaskTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/archive/task/AddDependencySetsTaskTest.java
@@ -26,8 +26,11 @@
import java.util.Properties;
import java.util.Set;
+import com.google.common.collect.ImmutableSet;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Model;
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
@@ -387,6 +390,62 @@ public void testGetDependencyArtifacts_ShouldFilterOneDependencyArtifactViaInclu
assertSame(am1, result.iterator().next());
}
+ @Test
+ public void testGetDependencyArtifacts_ShouldNotFilterOptionalArtifactsByDefault() throws Exception {
+ Artifact artifact1 = artifact(1);
+ artifact1.setOptional(true);
+ Artifact artifact2 = artifact(2);
+ Set resolvedArtifacts =
+ resolveDependencyArtifacts(new DependencySet(), ImmutableSet.of(artifact1, artifact2));
+ assertEquals(2, resolvedArtifacts.size());
+ }
+
+ @Test
+ public void testGetDependencyArtifacts_ShouldFilterOptionalArtifactsExplicitly() throws Exception {
+ Artifact artifact1 = artifact(1);
+ artifact1.setOptional(true);
+ Artifact artifact2 = artifact(2);
+ DependencySet dependencySet = new DependencySet();
+ dependencySet.setUseOptionalDependencies(false);
+
+ Set resolvedArtifacts =
+ resolveDependencyArtifacts(dependencySet, ImmutableSet.of(artifact1, artifact2));
+ assertEquals(1, resolvedArtifacts.size());
+ assertSame(artifact2, resolvedArtifacts.iterator().next());
+ }
+
+ @Test
+ public void testGetDependencyArtifacts_ShouldNotFilterOptionalArtifactsExplicitly() throws Exception {
+ Artifact artifact1 = artifact(1);
+ artifact1.setOptional(true);
+ Artifact artifact2 = artifact(2);
+ DependencySet dependencySet = new DependencySet();
+ dependencySet.setUseOptionalDependencies(true);
+
+ Set resolvedArtifacts =
+ resolveDependencyArtifacts(dependencySet, ImmutableSet.of(artifact1, artifact2));
+ assertEquals(2, resolvedArtifacts.size());
+ }
+
+ private static Artifact artifact(int id) {
+ return new DefaultArtifact(
+ "org.apache.maven.plugins",
+ "artifact" + id,
+ "1.0",
+ Artifact.SCOPE_COMPILE,
+ "jar",
+ null,
+ new DefaultArtifactHandler());
+ }
+
+ private Set resolveDependencyArtifacts(DependencySet dependencySet, Set artifacts)
+ throws Exception {
+ MavenProject project = new MavenProject(new Model());
+ AddDependencySetsTask task =
+ new AddDependencySetsTask(Collections.singletonList(dependencySet), artifacts, project, null);
+ return task.resolveDependencyArtifacts(dependencySet);
+ }
+
@Test
public void testGetDependencyArtifacts_ShouldIgnoreTransitivePathFilteringWhenIncludeNotTransitive()
throws Exception {