Въведение в приставката Animal Sniffer Maven

1. Въведение

Докато работим в Java, има моменти, когато трябва да използваме няколко езикови версии едновременно.

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

В тази бърза статия ще демонстрираме колко лесно е да добавим базирани на версията на Java предпазни мерки за несъвместимост и как приставката Animal Sniffer може да се използва за маркиране на тези проблеми по време на изграждане, като проверяваме нашия проект спрямо генерирани по-рано подписи.

2. Задаване на -source и -target на Java Compiler

Нека започнем с един здрав световен проект Maven - където използваме Java 7 на нашата локална машина, но бихме искали да внедрим проекта в производствената среда, която все още използва Java 6.

В този случай можем да конфигурираме приставката на компилатора Maven с полета източник и цел, сочещи към Java 6.

Полето „source“ се използва за определяне на съвместимост с промените в езика на Java, а полето „target“ се използва за определяне на съвместимост с промените в JVM.

Нека сега разгледаме конфигурацията на компилатора на Maven на pom.xml:

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

С Java 7 на нашата локална машина и Java код, отпечатващ „здравей, свят“ на конзолата, ако продължим и изградим този проект с помощта на 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, за да включим приставката:

 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, ако има такива по време на изграждане.

Както винаги, пълният изходен код е достъпен в GitHub.