Есть масса способов добавить внутрь программы номер сборки и время компиляции. Предлагаю еще один, который не требует 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 может не перекомпилироваться и значения останутся прежними, но обычно делают полную очистку всех скомпилированных файлов перед полной сборкой, а значит номер сборки будет обновлен.

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