На відміну від інших, я думаю, що є багато причин, чому ви завжди хочете останню версію. Особливо, якщо ви робите безперервне розгортання (у нас іноді є 5 релізів на день) і не хочете робити багатомодульний проект.
Що я роблю, це змушувати Хадсон / Дженкінс робити наступне для кожної збірки:
mvn clean versions:use-latest-versions scm:checkin deploy -Dmessage="update versions" -DperformRelease=true
Тобто я використовую плагін версій та scm плагін для оновлення залежностей, а потім перевіряю його у контролі джерела. Так, я дозволяю своїм CI робити SCM-контролі (що ви все одно повинні зробити для плагіна випуску Maven).
Ви хочете налаштувати плагін версій, щоб оновити лише те, що вам потрібно:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<includesList>com.snaphop</includesList>
<generateBackupPoms>false</generateBackupPoms>
<allowSnapshots>true</allowSnapshots>
</configuration>
</plugin>
Я використовую плагін випуску, щоб зробити випуск, який піклується про -SNAPSHOT і перевіряє наявність версії випуску -SNAPSHOT (що важливо).
Якщо ви зробите те, що я роблю, ви отримаєте останню версію для всіх знімків і останню версію версій для версій версій. Ваші збірки також будуть відтворені.
Оновлення
Я помітив декілька коментарів із запитаннями про певну специфіку цього робочого процесу. Я скажу, що ми більше не використовуємо цей метод, і велика причина, чому плагін для версій Maven є помилковим і в цілому є суттєвим недоліком.
Це недоліки, оскільки для запуску плагіна версій для коригування версій всі існуючі версії повинні існувати, щоб пом працював правильно. Тобто плагін версій не може оновлюватись до останньої версії нічого, якщо він не може знайти версію, на яку посилається у пам’яті. Це насправді досить дратує, оскільки ми часто чистимо старі версії з міркувань дискового простору.
Дійсно, вам потрібен окремий інструмент від maven для коригування версій (так що ви не залежите від файлу pom, щоб правильно запустити). Я написав такий інструмент низькою мовою, якою є Баш. Сценарій буде оновлювати версії, такі як плагін версії, і перевірити пом назад у контролі джерела. Він також працює на 100 разів швидше, ніж плагін версій mvn. На жаль, він не написаний таким чином для публічного користування, але якщо люди зацікавлені, я можу зробити так і покласти його в суть або github.
Повертаючись до робочого процесу, коли деякі коментарі запитували про те, що це ми робимо:
- У нас є близько 20 проектів у власних сховищах із власними роботами у джинкінах
- Коли ми випускаємо плагін Maven release, використовується плагін. Робочий процес цього описується в документації на плагін. Плагін випуску Maven висмоктує (і я добрий), але він працює. Одного разу ми плануємо замінити цей метод чимось більш оптимальним.
- Коли один із проектів випускає jenkins, тоді він виконує спеціальну роботу, ми називаємо роботу з оновленнями всіх версій (як відомо, jenkins знає, що її випуск частково є складним способом, тому що плагін для випуску Maven jenkins також досить хиткий).
- Завдання для оновлення всіх версій знає про всі 20 проектів. Фактично, агрегатор повинен бути специфічним для всіх проектів у розділі модулів у порядку залежності. Дженкінс запускає наше чарівне грошове / баш-фу, що дозволить усім проектам оновити версії до найновіших, а потім перевірити піс (що знову робиться в порядку залежності залежно від розділу модулів).
- Для кожного проекту, якщо пом. Змінили (через зміну версії в якійсь залежності), він реєструється, і ми негайно пінг-джинкінів, щоб виконати відповідне завдання для цього проекту (це зберегти порядок залежності залежності побудови, інакше ти на розсуд планувальника опитування SCM).
На даний момент я вважаю, що добре, щоб випуск та автоматична версія були в будь-якому випадку окремим інструментом від загальної збірки.
Тепер ви можете подумати, що maven різновид смокче через проблеми, перелічені вище, але це насправді буде досить складно з інструментом збирання, який не має декларативного простого розбору розширюваного синтаксису (він же XML).
Насправді ми додаємо власні атрибути XML через простори імен, щоб допомогти натякнути bash / groovy сценарії (наприклад, не оновлювати цю версію).