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 {