Введение в плагин Animal Sniffer Maven

Введение в плагин Animal Sniffer Maven

1. Вступление

При работе в Java иногда приходится использовать несколько языковых версий одновременно.

Обычно требуется, чтобы наша программа Java была совместима во время компиляции с одной версией Java (скажем, Java 6), но при этом необходимо использовать другую версию (скажем, Java 8) в наших инструментах разработки и, возможно, другую версию для запуска приложения. .

В этой быстрой статье мы продемонстрируем, как легко добавить средства защиты от несовместимости на основе версий Java и как можно использовать плагин Animal Sniffer для обозначения этих проблем во время сборки, сравнивая наш проект с ранее созданными подписями.

2. Установка-source и-target компилятора Java

Давайте начнем с проекта Mavenhello world, в котором мы используем Java 7 на нашем локальном компьютере, но мы хотели бы развернуть проект в производственной среде, которая все еще использует Java 6.

В этом случае мы можем настроить плагин компилятора Maven с полямиsource иtarget, указывающими на Java 6.

Поле“source” используется для указания совместимости с изменениями языка Java, а поле“target” используется для указания совместимости с изменениями JVM.

Теперь посмотрим на конфигурацию компилятора Mavenpom.xml:.


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

С Java 7 на нашем локальном компьютере и печатью Java-кода «hello world» на консоли, если мы продолжим и построим этот проект с использованием Maven, он будет правильно работать и работать на производственном компьютере под управлением Java 6.

3. Представляем несовместимость API

Давайте теперь посмотрим, как легко случайно ввести несовместимость API.

Допустим, мы начинаем работать над каким-то новым требованием и используем некоторые функции API Java 7, которых не было в Java 6.

Давайте посмотрим на обновленный исходный код:

public static void main(String[] args) {
    System.out.println("Hello World!");
    System.out.println(StandardCharsets.UTF_8.name());
}

java.nio.charset.StandardCharsets был представлен в Java 7.

Если мы сейчас выполним и выполним сборку Maven, она все равно будет успешно скомпилирована, но потерпит неудачу во время выполнения с ошибкой компоновки на рабочей коробке с установленной Java 6.

Mavendocumentation упоминает об этой ловушке и рекомендует использовать плагин Animal Sniffer в качестве одного из вариантов.

4. Совместимость API отчетов

Плагин Animal Sniffer предоставляет две основные возможности:

  1. Генерация подписей среды выполнения Java

  2. Проверка проекта по сигнатурам API

Теперь давайте изменимpom.xml, чтобы включить плагин:


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

Здесь раздел конфигурации Animal Sniffer ссылается на существующую подпись Java 6 во время выполнения. Кроме того, секция выполнения проверяет и проверяет исходный код проекта по заданной подписи и отмечает, если обнаружены какие-либо проблемы.

Если мы пойдем дальше и построим проект Maven, сборка завершится с ошибкой проверки подписи плагина, как и ожидалось:

[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. Заключение

В этом руководстве мы рассмотрели плагин Maven Animal Sniffer и его использование для сообщения о несовместимостях, связанных с API, если таковые имеются во время сборки.

Как всегда, доступен полный исходный кодover on GitHub.