hyperxpro/Brotli4j

[BUG] native java module reading error

jkuhn1 opened this issue · 2 comments

Describe the bug
When upgrading brotli4j from 1.12.0 to 1.13.0 (and onwards) in a Java modular application the following error was reported:

Error reading module: /home/jkuhn/.m2/repository/com/aayushatharva/brotli4j/native-linux-x86_64/1.15.0/native-linux-x86_64-1.15.0.jar'
java.lang.module.InvalidModuleDescriptorException: Package com.aayushatharva.brotli4j.linux.ppc64le not found in module'.

I've compared META-INF/versions/9/module-info.class files:

for native-linux-x86_64-1.12.0.jar:

module com.aayushatharva.brotli4j.linux.x86_64 {
  requires com.aayushatharva.brotli4j.service;
  requires java.base;
  
  exports com.aayushatharva.brotli4j.linux.x86_64 to com.aayushatharva.brotli4j;
  
  provides com.aayushatharva.brotli4j.service.BrotliNativeProvider with com.aayushatharva.brotli4j.linux.x86_64.NativeLoader;
}

from native-linux-x86_64-1.13.0.jar:

module com.aayushatharva.brotli4j.linux.ppc64le {
  requires com.aayushatharva.brotli4j.service;
  requires java.base;
  
  exports com.aayushatharva.brotli4j.linux.ppc64le to com.aayushatharva.brotli4j;
  
  provides com.aayushatharva.brotli4j.service.BrotliNativeProvider with com.aayushatharva.brotli4j.linux.ppc64le.NativeLoader;
}

So it seems from 1.13.0, x86_64 jar contains module descriptor for ppc64le and since the exported ppc64le package does not exist in the Jar the module is corrupted and can't be loaded. I haven't checked for other architectures but maybe they are also impacted.

To Reproduce
Create a Java modular application on linux x86_64 platform which uses brotli modules.

Expected behavior
native-linux-x86_64-1.15.0.jar must contain module com.aayushatharva.brotli4j.linux.x86_64.
ModuleFinder can load module com.aayushatharva.brotli4j.linux.x86_64 from native-linux-x86_64-1.15.0.jar

Logs
If applicable, add logs to help explain your problem.

Platform (please complete the following information):

  • Device: Linux
  • OS: Debian GNU/Linux 11 (bullseye) Linux 5.10.0-27-amd64
  • Java Version:
    openjdk version "21.0.1" 2023-10-17
    OpenJDK Runtime Environment (build 21.0.1+12-29)
    OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)

Additional context
Add any other context about the problem here.

Fixed in #130

Release will be cut soon

Fixed in #130

Release will be cut soon

Actually #130 won't solve that particular issue for linux_x86_64 platform. If you look at https://github.com/hyperxpro/Brotli4j/blob/main/natives/linux-x86_64/pom.xml you'll see the javaModuleName property is not correctly set:

<properties>
    <javaModuleName>com.aayushatharva.brotli4j.linux.s390x</javaModuleName>
    <javaModuleName>com.aayushatharva.brotli4j.linux.ppc64le</javaModuleName>
</properties>

instead of:

<properties>
    <javaModuleName>com.aayushatharva.brotli4j.linux.x86_64</javaModuleName>
</properties>

This bug was introduced in #102