This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new d296927de2 [MNG-8119] Remove build section from profiles in the consumer pom (#1503) d296927de2 is described below commit d296927de27c0118e1ca05c47f85f4e12132f373 Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon May 13 14:04:39 2024 +0200 [MNG-8119] Remove build section from profiles in the consumer pom (#1503) --- .../impl/DefaultConsumerPomBuilder.java | 34 ++++++++-- .../impl/ConsumerPomArtifactTransformerTest.java | 28 ++++++++ .../resources/projects/transform/jar/after.pom | 35 ++++++++++ .../resources/projects/transform/jar/before.pom | 74 ++++++++++++++++++++++ 4 files changed, 165 insertions(+), 6 deletions(-) diff --git a/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java b/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java index c86f395f33..9579697fc0 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java +++ b/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java @@ -258,9 +258,7 @@ class DefaultConsumerPomBuilder implements ConsumerPomBuilder { .build(null), model); builder.packaging(POM_PACKAGING); - builder.profiles(model.getProfiles().stream() - .map(p -> prune(Profile.newBuilder(p, true), p).build()) - .collect(Collectors.toList())); + builder.profiles(prune(model.getProfiles())); model = builder.build(); String modelVersion = new MavenModelVersion().getModelVersion(model); @@ -273,9 +271,8 @@ class DefaultConsumerPomBuilder implements ConsumerPomBuilder { .parent(null) .build(null), model); - builder.profiles(model.getProfiles().stream() - .map(p -> prune(Profile.newBuilder(p, true), p).build()) - .collect(Collectors.toList())); + builder.profiles(prune(model.getProfiles())); + model = builder.build(); String modelVersion = new MavenModelVersion().getModelVersion(model); model = model.withModelVersion(modelVersion); @@ -283,6 +280,31 @@ class DefaultConsumerPomBuilder implements ConsumerPomBuilder { return model; } + private static List<Profile> prune(List<Profile> profiles) { + return profiles.stream() + .map(p -> { + Profile.Builder builder = Profile.newBuilder(p, true); + prune((ModelBase.Builder) builder, p); + return builder.build(null).build(); + }) + .filter(p -> !isEmpty(p)) + .collect(Collectors.toList()); + } + + private static boolean isEmpty(Profile profile) { + return profile.getActivation() == null + && profile.getBuild() == null + && profile.getDependencies().isEmpty() + && (profile.getDependencyManagement() == null + || profile.getDependencyManagement().getDependencies().isEmpty()) + && profile.getDistributionManagement() == null + && profile.getModules().isEmpty() + && profile.getProperties().isEmpty() + && profile.getRepositories().isEmpty() + && profile.getPluginRepositories().isEmpty() + && profile.getReporting() == null; + } + private static <T extends ModelBase.Builder> T prune(T builder, ModelBase model) { builder.properties(null).reporting(null); if (model.getDistributionManagement() != null diff --git a/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java b/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java index 970881aa4d..b8f621f1dc 100644 --- a/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java +++ b/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java @@ -68,6 +68,34 @@ class ConsumerPomArtifactTransformerTest { XmlAssert.assertThat(afterPomFile.toFile()).and(tempFile.toFile()).areIdentical(); } + @Test + void transformJarConsumerPom() throws Exception { + RepositorySystemSession systemSessionMock = Mockito.mock(RepositorySystemSession.class); + SessionData sessionDataMock = Mockito.mock(SessionData.class); + when(systemSessionMock.getData()).thenReturn(sessionDataMock); + when(sessionDataMock.get(any())).thenReturn(new NoTransformerContext()); + + Path beforePomFile = Paths.get("src/test/resources/projects/transform/jar/before.pom") + .toAbsolutePath(); + Path afterPomFile = + Paths.get("src/test/resources/projects/transform/jar/after.pom").toAbsolutePath(); + Path tempFile = Files.createTempFile("", ".pom"); + Files.delete(tempFile); + try (InputStream expected = Files.newInputStream(beforePomFile)) { + Model model = new Model(new MavenStaxReader().read(expected)); + MavenProject project = new MavenProject(model); + project.setOriginalModel(model); + DefaultConsumerPomArtifactTransformer t = new DefaultConsumerPomArtifactTransformer((s, p, f) -> { + try (InputStream is = Files.newInputStream(f)) { + return DefaultConsumerPomBuilder.transform(new MavenStaxReader().read(is), project); + } + }); + + t.transform(project, systemSessionMock, beforePomFile, tempFile); + } + XmlAssert.assertThat(afterPomFile.toFile()).and(tempFile.toFile()).areIdentical(); + } + @Test void injectTransformedArtifactsWithoutPomShouldNotInjectAnyArtifacts() throws IOException { MavenProject emptyProject = new MavenProject(); diff --git a/maven-core/src/test/resources/projects/transform/jar/after.pom b/maven-core/src/test/resources/projects/transform/jar/after.pom new file mode 100644 index 0000000000..90810bb2ef --- /dev/null +++ b/maven-core/src/test/resources/projects/transform/jar/after.pom @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>io.github.helpermethod</groupId> + <artifactId>zip-forge</artifactId> + <version>1.0.1</version> + <name>zip-forge</name> + <description>A tiny, formatter-friendly Java DSL for creating ZIP files.</description> + <url>https://github.com/helpermethod/zip-forge</url> + <licenses> + <license> + <name>The Apache License, Version 2.0</name> + <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> + </license> + </licenses> + <scm> + <connection>scm:git:g...@github.com:helpermethod/zip-forge.git</connection> + <developerConnection>scm:git:g...@github.com:helpermethod/zip-forge.git</developerConnection> + <url>g...@github.com:helpermethod/zip-forge.git</url> + </scm> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <version>5.10.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.25.3</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/maven-core/src/test/resources/projects/transform/jar/before.pom b/maven-core/src/test/resources/projects/transform/jar/before.pom new file mode 100644 index 0000000000..cfe2e04cc1 --- /dev/null +++ b/maven-core/src/test/resources/projects/transform/jar/before.pom @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>io.github.helpermethod</groupId> + <artifactId>zip-forge</artifactId> + <version>1.0.1</version> + <name>zip-forge</name> + <description>A tiny, formatter-friendly Java DSL for creating ZIP files.</description> + <url>https://github.com/helpermethod/zip-forge</url> + <licenses> + <license> + <name>The Apache License, Version 2.0</name> + <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> + </license> + </licenses> + <scm> + <connection>scm:git:g...@github.com:helpermethod/zip-forge.git</connection> + <developerConnection>scm:git:g...@github.com:helpermethod/zip-forge.git</developerConnection> + <url>g...@github.com:helpermethod/zip-forge.git</url> + </scm> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <version>5.10.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.25.3</version> + <scope>test</scope> + </dependency> + </dependencies> + <profiles> + <profile> + <id>release</id> + <build> + <plugins> + <plugin> + <artifactId>maven-javadoc-plugin</artifactId> + <version>3.6.3</version> + <executions> + <execution> + <id>attach-javadocs</id> + <goals> + <goal>jar</goal> + </goals> + <configuration> + <attach>true</attach> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-source-plugin</artifactId> + <version>3.3.1</version> + <executions> + <execution> + <id>attach-sources</id> + <goals> + <goal>jar</goal> + </goals> + <configuration> + <attach>true</attach> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> \ No newline at end of file