quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.53k stars 2.61k forks source link

Build fails if a dependency contains dependency to old smallrye-config #41972

Closed joh-ivu closed 1 month ago

joh-ivu commented 1 month ago

Describe the bug

Consider an empty quarkus project with 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>bughunt6000</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.release>17</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <quarkus.version>3.12.2</quarkus.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus.platform</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>${quarkus.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
        </dependency>
        <dependency>
            <groupId>my.company</groupId>
            <artifactId>foobar-library</artifactId>
            <version>6.1.6</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.quarkus.platform</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus.version}</version>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                            <goal>generate-code</goal>
                            <goal>generate-code-tests</goal>
                            <goal>native-image-agent</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Executing mvn quarkus:build fails with the following error:

[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:3.12.2:build (default-cli) on project bughunt6000: Execution default-cli of goal io.quarkus.platform:quarkus-maven-plugin:3.12.2:build failed: An API incompatibility was encountered while executing io.quarkus.platform:quarkus-maven-plugin:3.12.2:build: java.lang.NoSuchMethodError: 'boolean io.smallrye.config.common.utils.StringUtil.isInPath(java.lang.String, java.lang.String)'

Expected behavior

The build should succeed

Actual behavior

Executing mvn quarkus:build fails with the following error:

[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:3.12.2:build (default-cli) on project bughunt6000: Execution default-cli of goal io.quarkus.platform:quarkus-maven-plugin:3.12.2:build failed: An API incompatibility was encountered while executing io.quarkus.platform:quarkus-maven-plugin:3.12.2:build: java.lang.NoSuchMethodError: 'boolean io.smallrye.config.common.utils.StringUtil.isInPath(java.lang.String, java.lang.String)'

How to Reproduce?

  1. Create a quarkus+maven project with the above pom.xml
  2. execute mvn quarkus:build

Output of uname -a or ver

No response

Output of java -version

17.0.11

Quarkus version or git rev

3.12.2

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.9.7 (8b094c9513efc1b9ce2d952b3b9c8eaedaf8cbf0) Maven home: C:\Users\joh.m2\wrapper\dists\apache-maven-3.9.7-bin\3k9n615lchs6mp84v355m633uo\apache-maven-3.9.7 Java version: 17.0.11, vendor: Eclipse Adoptium, runtime: C:\Program Files\Eclipse Adoptium\jdk-17.0.11.9-hotspot Default locale: de_DE, platform encoding: UTF-8 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Additional information

The dependency my.company:foobar-library seems to be the problem. It has a transitive dependency on smallrye-config-common:3.3.3 This older version DOES NOT contain the StringUtil::isInPath method that is mentioned in the error. I just do not understand why the quarkus build would use this older version instead of the newer version that the dependency resolution arrived at.

quarkus-bot[bot] commented 1 month ago

/cc @Ladicek (smallrye), @jmartisk (smallrye), @phillip-kruger (smallrye), @radcortez (config,smallrye)

radcortez commented 1 month ago

We are going to need an actual reproducer. I've followed your instructions, and obviously I don't have access to my-company:foobar-library, but I did create my own library pointing to SmallRye Config 3.3.3 and it worked as expected.

This is my dependency:tree output, which shows version 3.3.3 being overridden by 3.8.3:

[INFO] --- dependency:3.6.1:tree (default-cli) @ bughunt6000 ---
[INFO] com.example:bughunt6000:jar:1.0-SNAPSHOT
[INFO] +- io.quarkus:quarkus-arc:jar:3.12.2:compile
[INFO] |  +- io.quarkus.arc:arc:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:4.1.0:compile (version managed from 4.1.0)
[INFO] |  |  |  +- jakarta.enterprise:jakarta.enterprise.lang-model:jar:4.1.0:compile
[INFO] |  |  |  +- (jakarta.annotation:jakarta.annotation-api:jar:3.0.0:compile - version managed from 3.0.0; omitted for duplicate)
[INFO] |  |  |  +- jakarta.el:jakarta.el-api:jar:5.0.1:compile (version managed from 6.0.0)
[INFO] |  |  |  +- jakarta.interceptor:jakarta.interceptor-api:jar:2.2.0:compile (version managed from 2.2.0)
[INFO] |  |  |  \- (jakarta.inject:jakarta.inject-api:jar:2.0.1:compile - version managed from 2.0.1; omitted for duplicate)
[INFO] |  |  +- jakarta.annotation:jakarta.annotation-api:jar:3.0.0:compile (version managed from 3.0.0)
[INFO] |  |  +- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile (version managed from 2.0.1)
[INFO] |  |  +- io.smallrye.reactive:mutiny:jar:2.6.0:compile (version managed from 2.6.0)
[INFO] |  |  |  +- (io.smallrye.common:smallrye-common-annotation:jar:2.3.0:compile - version managed from 2.3.0; omitted for duplicate)
[INFO] |  |  |  \- org.jctools:jctools-core:jar:4.0.3:compile
[INFO] |  |  \- org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile (version managed from 3.6.0.Final)
[INFO] |  +- io.quarkus:quarkus-core:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  +- (jakarta.annotation:jakarta.annotation-api:jar:3.0.0:compile - version managed from 3.0.0; omitted for duplicate)
[INFO] |  |  +- (jakarta.enterprise:jakarta.enterprise.cdi-api:jar:4.1.0:compile - version managed from 4.1.0; omitted for duplicate)
[INFO] |  |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:compile (version managed from 2.0.1)
[INFO] |  |  +- io.smallrye.common:smallrye-common-os:jar:2.3.0:compile (version managed from 2.3.0)
[INFO] |  |  +- io.quarkus:quarkus-ide-launcher:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  +- io.quarkus:quarkus-development-mode-spi:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  +- io.smallrye.config:smallrye-config:jar:3.8.3:compile (version managed from 3.8.3)
[INFO] |  |  |  +- (io.smallrye.config:smallrye-config-core:jar:3.8.3:compile - version managed from 3.8.3; omitted for duplicate)
[INFO] |  |  |  \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.6.0.Final; omitted for duplicate)
[INFO] |  |  +- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.6.0.Final; omitted for duplicate)
[INFO] |  |  +- org.jboss.logmanager:jboss-logmanager:jar:3.0.6.Final:compile (version managed from 3.0.6.Final)
[INFO] |  |  |  +- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.3.Final; omitted for duplicate)
[INFO] |  |  |  +- (io.smallrye.common:smallrye-common-constraint:jar:2.3.0:compile - version managed from 2.2.0; omitted for duplicate)
[INFO] |  |  |  +- io.smallrye.common:smallrye-common-cpu:jar:2.3.0:compile (version managed from 2.2.0)
[INFO] |  |  |  +- (io.smallrye.common:smallrye-common-expression:jar:2.3.0:compile - version managed from 2.2.0; omitted for duplicate)
[INFO] |  |  |  +- io.smallrye.common:smallrye-common-net:jar:2.3.0:compile (version managed from 2.2.0)
[INFO] |  |  |  |  +- (io.smallrye.common:smallrye-common-constraint:jar:2.3.0:compile - version managed from 2.3.0; omitted for duplicate)
[INFO] |  |  |  |  \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.0.Final; omitted for duplicate)
[INFO] |  |  |  +- (io.smallrye.common:smallrye-common-os:jar:2.3.0:compile - version managed from 2.2.0; omitted for duplicate)
[INFO] |  |  |  +- io.smallrye.common:smallrye-common-ref:jar:2.3.0:compile (version managed from 2.2.0)
[INFO] |  |  |  |  \- (io.smallrye.common:smallrye-common-constraint:jar:2.3.0:compile - version managed from 2.3.0; omitted for duplicate)
[INFO] |  |  |  +- jakarta.json:jakarta.json-api:jar:2.1.3:compile (version managed from 2.1.3)
[INFO] |  |  |  \- org.eclipse.parsson:parsson:jar:1.1.6:compile (version managed from 1.1.6)
[INFO] |  |  |     \- (jakarta.json:jakarta.json-api:jar:2.1.3:compile - version managed from 2.1.3; omitted for duplicate)
[INFO] |  |  +- org.jboss.logging:jboss-logging-annotations:jar:2.2.1.Final:compile (version managed from 2.2.1.Final)
[INFO] |  |  +- org.jboss.threads:jboss-threads:jar:3.6.1.Final:compile (version managed from 3.6.1.Final)
[INFO] |  |  |  +- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.3.Final; omitted for duplicate)
[INFO] |  |  |  \- (org.wildfly.common:wildfly-common:jar:1.7.0.Final:compile - version managed from 1.7.0.Final; omitted for duplicate)
[INFO] |  |  +- org.slf4j:slf4j-api:jar:2.0.6:compile (version managed from 2.0.6)
[INFO] |  |  +- org.jboss.slf4j:slf4j-jboss-logmanager:jar:2.0.0.Final:compile (version managed from 2.0.0.Final)
[INFO] |  |  +- org.wildfly.common:wildfly-common:jar:1.7.0.Final:compile (version managed from 1.7.0.Final)
[INFO] |  |  +- io.quarkus:quarkus-bootstrap-runner:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  |  +- io.quarkus:quarkus-classloader-commons:jar:3.12.2:compile (version managed from 3.12.2)
[INFO] |  |  |  +- io.smallrye.common:smallrye-common-io:jar:2.3.0:compile (version managed from 2.3.0)
[INFO] |  |  |  +- (org.jboss.logmanager:jboss-logmanager:jar:3.0.6.Final:compile - version managed from 3.0.6.Final; omitted for duplicate)
[INFO] |  |  |  +- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.6.0.Final; omitted for duplicate)
[INFO] |  |  |  \- io.github.crac:org-crac:jar:0.1.3:compile (version managed from 0.1.3)
[INFO] |  |  \- io.quarkus:quarkus-fs-util:jar:0.0.10:compile (version managed from 0.0.10)
[INFO] |  \- org.eclipse.microprofile.context-propagation:microprofile-context-propagation-api:jar:1.3:compile (version managed from 1.3)
[INFO] \- com.radcortez.libraries.examples:config:jar:1.0-SNAPSHOT:compile
[INFO]    +- io.smallrye.config:smallrye-config-core:jar:3.8.3:compile (version managed from 3.3.3)
[INFO]    |  +- org.eclipse.microprofile.config:microprofile-config-api:jar:3.1:compile (version managed from 3.1)
[INFO]    |  +- io.smallrye.common:smallrye-common-annotation:jar:2.3.0:compile (version managed from 2.4.0)
[INFO]    |  +- io.smallrye.common:smallrye-common-expression:jar:2.3.0:compile (version managed from 2.4.0)
[INFO]    |  |  +- io.smallrye.common:smallrye-common-function:jar:2.3.0:compile (version managed from 2.3.0)
[INFO]    |  |  |  +- (io.smallrye.common:smallrye-common-constraint:jar:2.3.0:compile - version managed from 2.3.0; omitted for duplicate)
[INFO]    |  |  |  \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.0.Final; omitted for duplicate)
[INFO]    |  |  \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.0.Final; omitted for duplicate)
[INFO]    |  +- io.smallrye.common:smallrye-common-constraint:jar:2.3.0:compile (version managed from 2.4.0)
[INFO]    |  |  \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.5.0.Final; omitted for duplicate)
[INFO]    |  +- io.smallrye.common:smallrye-common-classloader:jar:2.3.0:compile (version managed from 2.4.0)
[INFO]    |  +- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.6.0.Final; omitted for duplicate)
[INFO]    |  +- org.ow2.asm:asm:jar:9.7:compile (version managed from 9.7)
[INFO]    |  \- (io.smallrye.config:smallrye-config-common:jar:3.8.3:compile - version managed from 3.8.3; omitted for duplicate)
[INFO]    \- io.smallrye.config:smallrye-config-common:jar:3.8.3:compile (version managed from 3.3.3)
[INFO]       +- (org.eclipse.microprofile.config:microprofile-config-api:jar:3.1:compile - version managed from 3.1; omitted for duplicate)
[INFO]       +- (io.smallrye.common:smallrye-common-classloader:jar:2.3.0:compile - version managed from 2.4.0; omitted for duplicate)
[INFO]       \- (org.jboss.logging:jboss-logging:jar:3.6.0.Final:compile - version managed from 3.6.0.Final; omitted for duplicate)
radcortez commented 1 month ago

Closing due to the lack of response. Please reopen if something changes.