microsoft / microsoft/kiota-java

microsoft-kiota-** dependencies have conflicting Automatic-Module-Name

Offen
#1,108 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug priority:p3 type:breaking-change
Vorherrschende Sprache
Java
Sterne
38
Forks
34
Ø Merge
15 Std. 9 Min.
Gemergte PRs (30 T.)
20

Beschreibung

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>

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Untersuche die tasks.jar-Manifest-Konfiguration in components/**/build.gradle, reproduziere dann den Konflikt mit der bereitgestellten pom.xml und dem dokumentierten jdeps-Befehl. Bestätige, dass die generierten Kiota-JARs keine doppelten com.microsoft.kiota-Modulnamen mehr erzeugen und dass jdeps erfolgreich abgeschlossen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
build-system
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.