Não é possível derivar o descritor de módulo para nomes de módulo gerados automaticamente no Java 9?

Meu projeto depende do transporte Netty Epoll. Aqui está dependência:

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

O nome do módulo gerado automaticamente para esta dependência é:

 netty.transport.native.epoll 

E como a palavra-chave native está reservada no Java 9, não posso adicionar este módulo como uma dependência ao meu projeto:

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

Devido a:

 module not found: netty.transport. 

Além disso, a ferramenta jar --describe-module reporta o seguinte:

Não é possível derivar o descritor de módulo para: netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86‌_64.jar netty.transport.native.epoll: Nome do módulo inválido: ‘native’ não é um identificador de Java

Existem algumas soluções? (exceto “liberar artefato netty correto”, é claro).

EDITAR :

Como solução rápida para os mantenedores – você pode adicionar a próxima linha a construir:

  netty.transport.epoll  

Bem, a solução para isso parece ser:

  • renomeando o artefato em si (pode não ser preferido por todos os proprietários)

    OU

  • Outra maneira de usar o mesmo nome de artefato ininterruptamente com um novo (diferente) nome de módulo poderia ser empacotando META-INF / MANIFEST.MF do artefato com um atributo Automatic-Module-Name que governa o nome do módulo a ser usado pelo descritor de módulo quando convertido como um módulo automático.

    OU

  • O proprietário do artefato pode include declarações de módulo usando module.info.java em seu JAR. (isso pode resultar em uma migration lenta de baixo para cima)


Desde a declaração do módulo definida nas especificações como:

Uma declaração de módulo introduz um nome de módulo que pode ser usado em outras declarações de módulo para expressar as relações entre os módulos. Um nome de módulo consiste em um ou mais identificadores Java (§3.8) separados por “.” fichas.


Intersetingly as declarações sugere –

Em alguns casos, o nome de domínio da Internet pode não ser um nome de pacote válido. Aqui estão algumas convenções sugeridas para lidar com essas situações:

  • Se o nome do domínio contiver um hífen ou qualquer outro caractere especial não permitido em um identificador (§3.8), converta-o em um sublinhado.

  • Se qualquer um dos componentes do nome do pacote resultante forem palavras-chave (§3.9), anexe um sublinhado a eles.

  • Se qualquer um dos componentes do nome do pacote resultante começar com um dígito ou qualquer outro caractere que não seja permitido como um caractere inicial de um identificador, terá um sublinhado prefixado ao componente.

Mas lembre-se que você faz isso para sublinhar é uma palavra-chave em Java9

insira a descrição da imagem aqui

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