diff --git a/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java b/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java index 84e6ad83..dd23790c 100644 --- a/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java +++ b/src/main/java/org/codehaus/mojo/flatten/FlattenMojo.java @@ -252,6 +252,16 @@ public class FlattenMojo @Parameter( required = false ) private FlattenDescriptor pomElements; + /** + * Dictates whether dependency exclusions stanzas should be included in the flattened POM. By default exclusions + * will be included in the flattened POM but if you wish to omit exclusions stanzas from being present then set + * this configuration property to true. + * + * @since 1.3.0 + */ + @Parameter( defaultValue = "false", required = false ) + private boolean omitExclusions; + /** * The different possible values for flattenMode: * @@ -1014,7 +1024,12 @@ protected List createFlattenedDependencies( Model effectiveModel ) // Non build-time driven profiles will remain in the flattened POM with their dependencies // and // allow dynamic dependencies due to OS or JDK. - flattenedDependencies.add( modelDependencies.resolve(profileDependency) ); + Dependency resolvedProfileDependency = modelDependencies.resolve(profileDependency); + if ( omitExclusions ) + { + resolvedProfileDependency.setExclusions(Collections.emptyList()); + } + flattenedDependencies.add( resolvedProfileDependency ); } } } @@ -1120,26 +1135,29 @@ private void createFlattenedDependenciesAll( List projectDependencie dependency.setScope(artifact.getScope()); dependency.setType(artifact.getType()); - List exclusions = new LinkedList<>(); + if ( !omitExclusions ) + { + List exclusions = new LinkedList<>(); - org.eclipse.aether.artifact.Artifact aetherArtifact = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), null, artifact.getVersion()); - ArtifactDescriptorRequest request = new ArtifactDescriptorRequest(aetherArtifact, null, null); - ArtifactDescriptorResult artifactDescriptorResult = this.artifactDescriptorReader + org.eclipse.aether.artifact.Artifact aetherArtifact = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), null, artifact.getVersion()); + ArtifactDescriptorRequest request = new ArtifactDescriptorRequest(aetherArtifact, null, null); + ArtifactDescriptorResult artifactDescriptorResult = this.artifactDescriptorReader .readArtifactDescriptor(this.session.getRepositorySession(), request); - for (org.eclipse.aether.graph.Dependency artifactDependency: artifactDescriptorResult.getDependencies()) - { - if ("test".equals(artifactDependency.getScope())) + for (org.eclipse.aether.graph.Dependency artifactDependency: artifactDescriptorResult.getDependencies()) { + if ("test".equals(artifactDependency.getScope())) + { continue; + } + Exclusion exclusion = new Exclusion(); + exclusion.setGroupId(artifactDependency.getArtifact().getGroupId()); + exclusion.setArtifactId(artifactDependency.getArtifact().getArtifactId()); + exclusions.add(exclusion); } - Exclusion exclusion = new Exclusion(); - exclusion.setGroupId(artifactDependency.getArtifact().getGroupId()); - exclusion.setArtifactId(artifactDependency.getArtifact().getArtifactId()); - exclusions.add(exclusion); - } - dependency.setExclusions(exclusions); + dependency.setExclusions(exclusions); + } // convert dependency to string for the set, since Dependency doesn't implement equals, etc. String dependencyString = dependency.getManagementKey(); @@ -1190,7 +1208,17 @@ protected void createFlattenedDependencies( Model effectiveModel, List !dep.getExclusions().isEmpty()) + .findAny() + .ifPresent(dep -> fail("No exclusions should be present in flattened POM.")); + } + + + private static Model readPom(String pomFilePath) throws IOException, XmlPullParserException { + try ( FileInputStream input = new FileInputStream( new File( pomFilePath ) ) ) { + return new MavenXpp3Reader().read( input ); + } + } + + + /** + * After test method. Removes flattened-pom.xml file which is created during test. + * + * @throws IOException if can't remove file. + */ + @After + public void removeFlattenedPom() throws IOException { + File flattenedPom = new File( FLATTENED_POM ); + if ( flattenedPom.exists() ) { + if ( !flattenedPom.delete() ) { + throw new IOException( "Can't delete " + flattenedPom ); + } + } + } +} diff --git a/src/test/resources/omit-exclusions/pom.xml b/src/test/resources/omit-exclusions/pom.xml new file mode 100644 index 00000000..9cc88ec1 --- /dev/null +++ b/src/test/resources/omit-exclusions/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + org.codehaus.mojo.flatten.its + + omit-exclusions + 0.0.1-SNAPSHOT + + + groupA + artifactB + 1 + + + groupX + artifactY + + + group1 + artifact2 + + + + + + verify + + + org.codehaus.mojo + flatten-maven-plugin + + true + + + + + \ No newline at end of file