-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Filipe Roque opened MASSEMBLY-1026 and commented
maven-assembly-plugin 3.7.0 is not consistent with maven-jar-plugin and maven-dependency-plugin
For the following pom.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>
src/main/assembly/descriptor.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>
src/main/java/org/example/Foo.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);
}
}
Maven dependency plugin indicates that guava 16 will be used
❯ /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)maven-jar-plugin indicates guava 16 will be used
❯ 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
And executing fails due to maven-assembly-plugin assemblying guava 31
❯ 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❯ 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.jar1 votes, 2 watchers
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working