¿No se puede derivar el descriptor del módulo para los nombres de los módulos autogenerados en Java 9?

Mi proyecto depende del transporte de Netty Epoll. Aquí está la dependencia:

 io.netty netty-transport-native-epoll ${netty.version} ${epoll.os}  

El nombre del módulo generado automáticamente para esta dependencia es:

 netty.transport.native.epoll 

Y como la palabra clave native está reservada en Java 9, no puedo agregar este módulo como una dependencia de mi proyecto:

 module core { requires netty.transport.native.epoll; } 

Debido a:

 module not found: netty.transport. 

Además, la herramienta jar --describe-module informa lo siguiente:

No se puede derivar el descriptor del módulo para: netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86_64.jar netty.transport.native.epoll: Nombre del módulo no válido: ‘native’ no es un identificador de Java

¿Hay alguna solución? (excepto “liberar el artefacto de netty correcto”, por supuesto).

EDITAR :

Como la solución rápida para los mantenedores, puede agregar la siguiente línea para comstackr:

  netty.transport.epoll  

Bueno, la solución a esto parece ser:

  • cambiar el nombre del artefacto en sí mismo (puede que no sea preferido por todos los propietarios)

    O

  • Otra forma de utilizar ininterrumpidamente el mismo nombre de artefacto con un nuevo nombre de módulo (diferente) podría ser empaquetar META-INF / MANIFEST.MF del artefacto con un atributo Automatic-Module-Name que rige el nombre del módulo que se utilizará por el descriptor del módulo cuando se convierte como un módulo automático.

    O

  • El propietario del artefacto puede agregar declaraciones de módulo usando module.info.java a su JAR. (esto podría resultar en una lenta migración ascendente)


Dado que la statement del módulo se define en las especificaciones como:

Una statement de módulo introduce un nombre de módulo que se puede usar en otras declaraciones de módulo para express relaciones entre módulos. Un nombre de módulo consiste en uno o más identificadores de Java (§3.8) separados por “.” tokens.


Intersetly las declaraciones sugiere –

En algunos casos, el nombre de dominio de Internet puede no ser un nombre de paquete válido. Aquí hay algunas convenciones sugeridas para lidiar con estas situaciones:

  • Si el nombre de dominio contiene un guión, o cualquier otro carácter especial no permitido en un identificador (§3.8), conviértalo en un guión bajo.

  • Si alguno de los componentes resultantes del nombre del paquete son palabras clave (§3.9), añádales un guión bajo.

  • Si alguno de los componentes resultantes del nombre del paquete comienza con un dígito, o cualquier otro carácter que no esté permitido como carácter inicial de un identificador, tenga un subrayado prefijado al componente.

Pero tenga en cuenta al hacerlo que Underscore es una palabra clave en Java9

enter image description here

 int _; // is would throw error on javac based out of JDK9 int _native; // works fine