Enquanto trabalhamos em Java, há momentos em que precisamos usar várias versões de idiomas ao mesmo tempo.
É comum precisar que nosso programa Java seja compatível em tempo de compilação com uma versão Java (digamos - Java 6), mas precisar usar uma versão diferente (digamos - Java 8) em nossas ferramentas de desenvolvimento e talvez uma versão diferente para executar o aplicativo .
Neste artigo rápido, vamos demonstrar como é fácil adicionar salvaguardas de incompatibilidade baseadas na versão Java e como o plug-in Animal Sniffer pode ser usado para sinalizar esses problemas em tempo de compilação, verificando nosso projeto contra assinaturas geradas anteriormente.
2. Definindo-sourcee-target do compilador Java
Vamos começar com um projeto Mavenhello world - em que estamos usando Java 7 em nossa máquina local, mas gostaríamos de implantar o projeto no ambiente de produção que ainda usa Java 6.
Neste caso, podemos configurar o plugin do compilador Maven com os campossourceetarget apontando para Java 6.
O campo“source” é usado para especificar a compatibilidade com as alterações da linguagem Java e o campo“target” é usado para especificar a compatibilidade com as alterações da JVM.
Vejamos agora a configuração do compilador Maven depom.xml:
Com o Java 7 em nossa máquina local e a impressão de código Java “olá mundo” no console, se continuarmos a construir este projeto usando o Maven, ele criará e funcionará corretamente em uma caixa de produção executando o Java 6.
3. Apresentando Incompatibilidades de API
Vejamos agora como é fácil introduzir a incompatibilidade de API por acidente.
Digamos que começamos a trabalhar em algum novo requisito e usamos alguns recursos de API do Java 7 que não estavam presentes no Java 6.
Vejamos o código-fonte atualizado:
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.println(StandardCharsets.UTF_8.name());
}
java.nio.charset.StandardCharsets foi introduzido no Java 7.
Se agora prosseguirmos e executar a compilação do Maven, ela ainda será compilada com êxito, mas falhará em tempo de execução com erro de ligação em uma caixa de produção com o Java 6 instalado.
O Mavendocumentation menciona essa armadilha e recomenda o uso do plugin Animal Sniffer como uma das opções.
4. Compatibilidades da API de relatórios
O plugin Animal Sniffer fornece dois recursos principais:
Gerando assinaturas do Java Runtime
Verificando um Projeto em Assinaturas de API
Vamos agora modificar opom.xml para incluir o plugin:
Aqui, a seção de configuração do Animal Sniffer refere-se a uma assinatura de tempo de execução Java 6 existente. Além disso, a seção de execução verifica e verifica o código-fonte do projeto com relação à assinatura e sinalizadores fornecidos, se houver algum problema.
Se formos adiante e compilarmos o projeto Maven, a compilação falhará com o plug-in que relata o erro de verificação de assinatura conforme o esperado:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:animal-sniffer-maven-plugin:1.16:check
(animal-sniffer) on project example-animal-sniffer-mvn-plugin: Signature errors found.
Verify them and ignore them with the proper annotation if needed.
5. Conclusão
Neste tutorial, exploramos o plug-in Maven Animal Sniffer e como ele pode ser usado para relatar incompatibilidades relacionadas à API, se houver, no momento da criação.
Como sempre, o código-fonte completo está disponívelover on GitHub.