Introdução ao Plugin Animal Sniffer Maven

Introdução ao Plugin Animal Sniffer Maven

1. Introdução

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:


    
        org.apache.maven.plugins
        maven-compiler-plugin
        3.7.0
    
            1.6
            1.6
    
    

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:

  1. Gerando assinaturas do Java Runtime

  2. Verificando um Projeto em Assinaturas de API

Vamos agora modificar opom.xml para incluir o plugin:


    org.codehaus.mojo
    animal-sniffer-maven-plugin
    1.16
    
        
            org.codehaus.mojo.signature
            java16
            1.0
        
    
    
        
            animal-sniffer
            verify
            
                check
            
        
    

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.