Jdbi: JDBI3 versão 3.19.0 não funciona em JDK <11

Criado em 12 abr. 2021  ·  7Comentários  ·  Fonte: jdbi/jdbi

De acordo com as notas de lançamento , esperava que esta versão funcionasse no JDK 8 em diante, mas recebo o seguinte erro:

java.lang.UnsupportedClassVersionError: com/github/benmanes/caffeine/cache/Caffeine has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 53.0

A versão de classe 55.0 é JDK 11, portanto, não funcionará no JDK 8 em diante.
Isso veio à tona na seguinte solicitação de mesclagem: https://github.com/talsma-ict/enumerables/pull/242

question

Comentários muito úteis

desculpe, você: a cafeína não tem nenhuma versão que rode em jdk8 e jdk16

Só para constar, o problema de compatibilidade no 2.x é apenas para quem deseja desabilitar sun.misc.Unsafe . Isso ainda é permitido no JDK16 por padrão, mas pode ser restrito via jlink. O inseguro não era mais necessário no Caffeine 3.0 (por meio de fallbacks) e foi completamente removido no master (a ser lançado no 3.0.2). O aumento das restrições de acesso no JDK16 não nos afetou, mas o JDK8 não foi fornecido com o VarHandles, então ficamos presos no uso de Unsafe (ou migrando para AtomicReferenceFieldUpdater que tem problemas de desempenho devido ao uso de reflexão ao acessar um campo) .

Todos 7 comentários

Olá @sjoerdtalsma , sinto muito por você: o caffeine não tem nenhuma versão que rode em jdk8 e jdk16. Como 16 agora é GA, o Jdbi atualizou para uma versão do Caffeine que é compatível. As notas de lançamento mencionam:

atualizar cafeína dep para 3.0.1 para jdk16 (NOTA: os usuários jdk8 precisarão gerenciá-lo de volta para 2.x)

mas concordo que não é muito proeminente.

Também adicionei uma observação aqui: http://jdbi.org/#_java_compatibility

Existe alguma maneira de sinalizar melhor isso para os usuários? Esperançosamente, uma vez que você gerenciar a versão com cafeína de volta para 2.x, tudo funcionará, mas por favor nos avise se houver mais problemas.

Fiz algumas atualizações nas notas de lançamento para destacar isso com muito mais destaque. Informe-nos se houver mais alguma coisa que possamos fazer melhor aqui.

Obrigado, espero que outros leiam com um pouco mais de atenção do que eu.
Não é realmente um problema para mim, mas algo com que os usuários da minha biblioteca devem ter cuidado, pois esta é uma dependência transitiva de uma dependência transitiva para eles 😉.

Decidi não fazer o downgrade da cafeína, mas ficar com a versão padrão e apenas construir com um JDK mais recente e ainda fornecer um artefato bytecode JDK8. Assim, deixo que eles decidam por si próprios.

Obrigado pela ênfase extra, encerrarei este problema agora.

Sim, é realmente lamentável que isso seja enviado aos usuários finais. Mas se eles querem uma excelente experiência de desenvolvimento, é hora de atualizar o Java, ele só vai ficar cada vez mais difícil de executar no 8;)

Imagine tentar manter a compatibilidade do bytecode JDK 1.5 enquanto adiciona metadados module-info.java quebra-cabeça para sua biblioteca 😉
Tento manter os requisitos restritos ao mínimo denominador comum.

desculpe, você: a cafeína não tem nenhuma versão que rode em jdk8 e jdk16

Só para constar, o problema de compatibilidade no 2.x é apenas para quem deseja desabilitar sun.misc.Unsafe . Isso ainda é permitido no JDK16 por padrão, mas pode ser restrito via jlink. O inseguro não era mais necessário no Caffeine 3.0 (por meio de fallbacks) e foi completamente removido no master (a ser lançado no 3.0.2). O aumento das restrições de acesso no JDK16 não nos afetou, mas o JDK8 não foi fornecido com o VarHandles, então ficamos presos no uso de Unsafe (ou migrando para AtomicReferenceFieldUpdater que tem problemas de desempenho devido ao uso de reflexão ao acessar um campo) .

hi @ ben-manes, obrigado pelo contexto extra aqui. É verdade que jdk16 permite que você ainda use Unsafe, mas não acho que seja permitido por padrão - pelo menos em nosso caso, tivemos que passar --illegal-access=permit pois o padrão agora é negar. Eu não queria que a "experiência fora da caixa" para um novo projeto jdk16 com Jdbi exigisse uma opção feia como essa, daí a atualização para 3.x.

Obrigado por atualizar para não usar mais o Unsafe, estamos felizes em ver que ele foi embora :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

electrum picture electrum  ·  3Comentários

stevenschlansker picture stevenschlansker  ·  4Comentários

jarlah picture jarlah  ·  3Comentários

qualidafial picture qualidafial  ·  3Comentários

anjeyy picture anjeyy  ·  3Comentários