Перейти к основному содержимому

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

· 3 мин. чтения

1. Введение

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

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

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

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

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

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

Поле «источник» используется для указания совместимости с изменениями языка Java, а поле «цель» — для указания совместимости с изменениями JVM.

Давайте теперь посмотрим на конфигурацию компилятора Maven для pom.xml:

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>

С 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.

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

4. Отчеты о совместимости API

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

  1. Генерация подписей среды выполнения Java
  2. Проверка проекта по подписям API

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

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.16</version>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java16</artifactId>
<version>1.0</version>
</signature>
</configuration>
<executions>
<execution>
<id>animal-sniffer</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

Здесь раздел конфигурации 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, если таковые имеются, во время сборки.

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