quarkusio / quarkus

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

Applications using Brotli4J cannot be built using gradle #43662

Open zakkak opened 3 days ago

zakkak commented 3 days ago

Describe the bug

Applications using Brotli4J rely on native code shipped with com.aayushatharva.brotli4j:native-* artifacts. These packages are added to the dependencies using maven profiles which unfortunately don't work in Gradle.

Expected behavior

Application should built and be functional, just like with maven.

Actual behavior

Application is build but fails at runtime with:

__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2024-10-02 22:52:29,691 ERROR [io.qua.run.Application] (main) Failed to start application: java.lang.RuntimeException: Failed to start quarkus
    at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
    at io.quarkus.runtime.Application.start(Application.java:101)
    at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:119)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:124)
    at io.quarkus.runner.GeneratedMain.main(Unknown Source)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:62)
    at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:33)
Caused by: java.lang.ExceptionInInitializerError
    at io.netty.handler.codec.compression.StandardCompressionOptions.brotli(StandardCompressionOptions.java:35)
    at io.quarkus.vertx.http.runtime.options.HttpServerOptionsUtils.applyCommonOptions(HttpServerOptionsUtils.java:297)
    at io.quarkus.vertx.http.runtime.VertxHttpRecorder.createHttpServerOptions(VertxHttpRecorder.java:1021)
    at io.quarkus.vertx.http.runtime.VertxHttpRecorder.initializeMainHttpServer(VertxHttpRecorder.java:751)
    at io.quarkus.vertx.http.runtime.VertxHttpRecorder.doServerStart(VertxHttpRecorder.java:856)
    at io.quarkus.vertx.http.runtime.VertxHttpRecorder.startServer(VertxHttpRecorder.java:355)
    at io.quarkus.deployment.steps.VertxHttpProcessor$openSocket1753087980.deploy_0(Unknown Source)
    at io.quarkus.deployment.steps.VertxHttpProcessor$openSocket1753087980.deploy(Unknown Source)
    ... 11 more
Caused by: java.lang.IllegalStateException: Brotli is not available
    at io.netty.handler.codec.compression.BrotliOptions.<init>(BrotliOptions.java:38)
    at io.netty.handler.codec.compression.BrotliOptions.<clinit>(BrotliOptions.java:33)
    ... 19 more
Caused by: java.lang.UnsatisfiedLinkError: Failed to find Brotli native library in classpath: /lib/linux-x86_64/libbrotli.so
    at com.aayushatharva.brotli4j.Brotli4jLoader.<clinit>(Brotli4jLoader.java:77)
    at io.netty.handler.codec.compression.Brotli.<clinit>(Brotli.java:46)
    at io.netty.handler.codec.compression.BrotliOptions.<init>(BrotliOptions.java:37)

How to Reproduce?

  1. quarkus create app --gradle
  2. Add the following lines to src/main/resources/application.properties
    quarkus.http.enable-compression=true
    quarkus.http.compressors=br
  3. ./gradlew build -x test
  4. java -jar ./build/quarkus-app/quarkus-run.jar

Output of uname -a or ver

Linux fedora 6.10.11-200.fc40.x86_64

Output of java -version

21.0.4+7-LTS

Mandrel or GraalVM version (if different from Java)

No response

Quarkus version or git rev

3.15.1

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

Gradle 8.7

Additional information

https://github.com/hyperxpro/Brotli4j?tab=readme-ov-file#gradle contains some details on what needs to be done in Gradle to make this work.

quarkus-bot[bot] commented 3 days ago

/cc @Karm (mandrel), @galderz (mandrel), @glefloch, @quarkusio/devtools