¿No se puede derivar un descriptor de módulo para los nombres de módulos generados automáticamente en Java 9?
netty java-9 (1)
Mi proyecto depende del transporte de Netty Epoll. Aquí está la dependencia:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
<version>${netty.version}</version>
<classifier>${epoll.os}</classifier>
</dependency>
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 a mi proyecto:
module core {
requires netty.transport.native.epoll;
}
Debido a:
module not found: netty.transport.<error>
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 de módulo no válido: ''native'' no es un identificador de Java
¿Hay alguna solución? (excepto "liberar artefacto netty correcto", por supuesto).
EDIT :
Como la solución rápida para los mantenedores, puede agregar la siguiente línea para construir:
<manifestEntries>
<Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>
Bueno, la solución a esto parece ser:
cambiar el nombre del artefacto en sí(es posible que no sea preferido por todos los propietarios)O
Otra forma posible de usar ininterrumpidamente el mismo nombre de artefacto con un nuevo (diferente) nombre de módulo podría ser empaquetando META-INF / MANIFEST.MF del artefacto con un atributo Automatic-Module-Name que gobierna el nombre del módulo que se usará 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)
Desde la declaración del módulo definido en las especificaciones como:
Una declaración de módulo introduce un nombre de módulo que se puede usar en otras declaraciones de módulo para expresar relaciones entre módulos. Un nombre de módulo consta de uno o más identificadores Java (§3.8) separados por "." tokens
Interrumpidamente las declarations sugieren:
En algunos casos, el nombre de dominio de Internet puede no ser un nombre de paquete válido. Aquí hay algunas convenciones sugeridas para tratar 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 del nombre del paquete resultante son palabras clave (§3.9), agregue un guión bajo a ellos.
Si alguno de los componentes del nombre del paquete resultante comienza con un dígito, o cualquier otro carácter que no esté permitido como carácter inicial de un identificador, tiene un subrayado con prefijo al componente.
Pero tenga en cuenta mientras lo hace, que el subrayado es una palabra clave en Java9
int _; // is would throw an error on javac based out of JDK9
int _native; // works fine