Description
We use for our projects both jdeps
and jlink
tools to generate a slim JRE. However since the switch to com.microsoft.graph:microsoft-graph:6.4.0
(v6 of the SDK, recently released), which builds on top of the microsoft-kiota-**
dependencies. We can't seem to run our jdeps
command succesfully anymore.
Previously (without the microsoft-kiota-**
dependencies on the class-/module path we have been using the following command; (exectued from target/
)
jdeps --multi-release base --recursive --ignore-missing-deps --print-module-deps --class-path="./lib/*" --module-path="./lib/*" -quiet demo-0.0.1-SNAPSHOT.jar
Which would list something like this; java.base,spring.boot,spring.boot.autoconfigure,spring.context,spring.core
Note: When running this on a Windows machine, be sure to change ./lib/*
to ./lib
(as there is an issue with the *
wildcard.
Howafter after switching to com.microsoft.graph:microsoft-graph:6.4.0
we not get the following exception when we run the same command;
Exception in thread "main" java.lang.module.FindException: Two versions of module com.microsoft.kiota found in .\lib (microsoft-kiota-authentication-azure-1.0.4.jar and microsoft-kiota-abstractions-1.0.4.jar)
at java.base/jdk.internal.module.ModulePath.scanDirectory(ModulePath.java:295)
at java.base/jdk.internal.module.ModulePath.scan(ModulePath.java:233)
at java.base/jdk.internal.module.ModulePath.scanNextEntry(ModulePath.java:191)
at java.base/jdk.internal.module.ModulePath.findAll(ModulePath.java:167)
at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:558)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:607)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:561)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:537)
at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:50)
A quick look here in the repository shows me that all components/**/build.gradle
files are containing this piece of code;
tasks.jar {
manifest {
attributes('Automatic-Module-Name': project.property('mavenGroupId'))
}
}
So the Automatic-Module-Name
is set to an unique value, which isn't correct in my opinion. Might be better to use the artifactId
here maybe? But that is up to you guys ;)
Following pom.xml
file can be used to simulate this issue. Note the maven-dependency-plugin
which copies all the dependencies (on mvn install
) to target/lib
for easier testing with the command.
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>21</java.version>
<microsoft-graph.version>6.4.0</microsoft-graph.version>
<azure-identity.version>1.11.2</azure-identity.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.graph</groupId>
<artifactId>microsoft-graph</artifactId>
<version>${microsoft-graph.version}</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>${azure-identity.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Metadata
Metadata
Assignees
Labels
Type
Projects
Status