Filipe Roque created MASSEMBLY-1026: ---------------------------------------
Summary: Assembly plugin 3.7.0 handles scopes wrongly Key: MASSEMBLY-1026 URL: https://issues.apache.org/jira/browse/MASSEMBLY-1026 Project: Maven Assembly Plugin Issue Type: Bug Reporter: Filipe Roque Maven 3.7.0 is not consistent with maven-jar-plugin and maven-dependency-plugin For the following *pom.xml* {code:xml} <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd";> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>assembly-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>org.example.Foo</mainClass> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> <finalName>${project.artifactId}</finalName> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <!-- <version>3.6.0</version>--> <version>3.7.0</version> <configuration> <descriptors> <descriptor>src/main/assembly/descriptor.xml</descriptor> </descriptors> <attach>false</attach> <finalName>${project.artifactId}</finalName> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId> <version>2.7.3</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>6.0.0</version> </dependency> </dependencies> </project> {code} *src/main/assembly/descriptor.xml* {code:xml} <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd";> <id>assembly</id> <formats> <format>dir</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <baseDirectory>.</baseDirectory> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>false</useProjectArtifact> <scope>runtime</scope> </dependencySet> </dependencySets> <files> <file> <outputDirectory>/</outputDirectory> <source>target/assembly-demo.jar</source> </file> </files> </assembly> {code} *src/main/java/org/example/Foo.java* {code:java} package org.example; public class Foo { public static void main(String[] args) { // CheckedFuture was removed in Guava 28 System.out.println(com.google.common.util.concurrent.CheckedFuture.class); } } {code} Maven dependency plugin indicates that guava 16 will be used {code:bash} ❯ /opt/maven/apache-maven-3.9.5/bin/mvn -q dependency:tree -Dverbose -Dincludes=com.google.guava:guava -DoutputFile=tree.txt; cat tree.txt org.example:assembly-demo:jar:1.0-SNAPSHOT +- com.fasterxml.jackson.datatype:jackson-datatype-guava:jar:2.7.3:test | \- com.google.guava:guava:jar:16.0:compile \- com.google.inject:guice:jar:6.0.0:compile \- (com.google.guava:guava:jar:31.0.1-jre:compile - omitted for conflict with 16.0) {code} maven-jar-plugin indicates guava 16 will be used {code:bash} ❯ unzip -q -c target/assembly-demo-assembly/assembly-demo.jar META-INF/MANIFEST.MF Manifest-Version: 1.0 Created-By: Maven JAR Plugin 3.3.0 Build-Jdk-Spec: 21 Class-Path: guava-16.0.jar guice-6.0.0.jar javax.inject-1.jar jakarta.in ject-api-2.0.1.jar aopalliance-1.0.jar Implementation-Title: assembly-demo Implementation-Version: 1.0-SNAPSHOT Main-Class: org.example.Foo {code} And executing fails due to maven-assembly-plugin assemblying guava 31 {code:java} ❯ java -jar target/assembly-demo-assembly/assembly-demo.jar Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/CheckedFuture at org.example.Foo.main(Foo.java:7) Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.CheckedFuture at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 1 more {code} {code:bash} ❯ ls -1 target/assembly-demo-assembly/ aopalliance-1.0.jar assembly-demo.jar checker-qual-3.12.0.jar error_prone_annotations-2.7.1.jar failureaccess-1.0.1.jar guava-31.0.1-jre.jar guice-6.0.0.jar j2objc-annotations-1.3.jar jakarta.inject-api-2.0.1.jar javax.inject-1.jar jsr305-3.0.2.jar listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)