Страницы

Поиск по вопросам

среда, 1 января 2020 г.

IntelliJ IDEA - можно ли автоматически увеличивать номер сборки (версии)?

#java #intellij_idea #gradle


Есть Java-Gradle проект. При выполнении задачи build собирается jar файл проекта
с именем artifact-1.0.jar. Нужно чтобы при каждом выполнении задачи build версия изменялась.
Пример:


artifact-1.0-1.jar.
artifact-1.0-5.jar.
artifact-1.0-20.jar. 
...
artifact-1.0-N.jar.


Как правильно реализовать это?
    


Ответы

Ответ 1



Сначала нам нужно написать файл ant xml. Этот файл будет создавать файл, где номер сборки будет сохранен и увеличен, а затем он просмотрит файл исходного кода ${src}/com/yourPath/Main.java для переменной public static final String BUILD_NUMBER = ".*"; и замените ее на текущий номер сборки. Файл xml будет выглядеть так: simple example increment build variable My first ant ${src} ${line.separator} Затем в вашем IntelliJ вы нажимаете View->Tool Windows->Ant Build. Затем + и перейдите к вашему xml файлу (обратите внимание, что текущий путь, используемый вашим xml, станет путем для самого файла xml, а не для проекта inteliJ, поэтому вы можете исправить часть location="../src" в зависимости от того, где вы храните свой XML). Затем вы увидите нашу цель init, которую вы можете выбрать, и нажмите кнопку play. Если он работает, вы увидите BUILD_NUMBER, добавленный в исходный код Main.java. Теперь важный трюк, как сделать это автоматически: просто щелкните правой кнопкой мыши по init и выберите Execute on->Before Compilation. Всё, больше ничего, готово :) Вот оригинал

Ответ 2



Вообще добавлять именно порядковый номер не лучшая идея. Т.к. при очистке сборочных данных этот номер потеряется. Да и сканирование предыдущих версий не самая простая задача. Лучше добавлять метку времени. В простейшем случае для Groovy DSL это делается так: String versionSuffix = "-"+System.currentTimeMillis() jar { archiveVersion.set(project.version.toString() + versionSuffix) } Для Kotlin DSL так: val versionSuffix: String = "-"+System.currentTimeMillis() tasks.named("jar") { archiveVersion.set(project.version.toString() + versionSuffix) }

Ответ 3



Если все происходит под git + gradle (а сейчас это почти всегда так) - то я делаю это примерно так: 1) В build.gradle определяем функцию, которая считает номер сборки (начиная от корня): def getBuildCode = { -> try { def stdout = new ByteArrayOutputStream() exec { standardOutput = stdout commandLine 'git', 'rev-list', '--first-parent', '--count', 'master' } println("Build #"+stdout) return asInteger(stdout.toString("ASCII").trim()) } catch (Exception e) { e.printStackTrace(); return 0; } } 2) Далее в генерацию jar вставляем номер сборки: def buildCode=getBuildCode() task fatJar(type: Jar) { baseName = project.name + '-' + buildCode from { ... } with jar }

Комментариев нет:

Отправить комментарий