Еще один способ учета времени и номера сборки для Java

от автора

Есть масса способов добавить внутрь программы номер сборки и время компиляции. Предлагаю еще один, который не требует Maven/Jenkins/Bamboo и не комитит в git.

Я обычно работаю с серверной Java и почти в любое приложение (Tomcat/Spring/Play…) требуется добавить end-point, который при HTTP запросе сообщит номер и время сборки приложения. Я перепробовал разные способы и нашел тот, который меня устраивает во всем. Процесс интеграции в любое Java приложение занимает 5-10 минут.

Для начала нужно зарегистрироваться на Backendless и создать там приложение (можно использовать любой другой сервис, который умеет по http запросу отдавать число, увеличивая его каждый раз на 1). Получив APP_ID приложения нужно также получить API_KEY на этой странице.

После этого вы сможете использовать возможность получать целое число, которое будет увеличиваться на 1 после каждого запроса.

Для того, чтобы это число попадало в программу, нужно воспользоваться моей OpenSource библиотекой kolobok. Указываем зависимость на библиотеку в pom.xml или build.gradle.

maven

  <dependency>     <groupId>com.github.ukman</groupId>     <artifactId>kolobok</artifactId>     <version>0.1.5</version>     <scope>compile</scope>     </dependency> 

gradle

  compileOnly 'com.github.ukman:kolobok:0.1.5' 

Добавляем аннотацию для поля в каком-либо классе (не забывая прописать правильный APP_ID и API_KEY внутри параметра url).

import org.kolobok.annotation.*;  public class Main {      @BuildNumber(url = "https://api.backendless.com/${APP_ID}/${API_KEY}/counters/build/increment/get", method = "PUT")     public static long bn;     @CompileTime     public static long ct;          public static void main(String args[]) {         System.out.println("Build number = " + bn + " compilation time " + new Date(ct));     }  } 

Теперь после каждой перекомпиляции класса Main у вас в поле bn будет новое число из последовательности возрастающих чисел, а в поле ct- время компиляции. То есть на вход компилятору уйдет что-то вроде.

    public static long bn = 1; // 2..3..4..5..     public static long ct = 1580107708793;  // System.currentTimeMillis()     

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

Теперь можно использовать эти переменные для показа номера и времени сборки пользователю.

ссылка на оригинал статьи https://habr.com/ru/post/485552/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *