Вы можете легко указать Maven включить версию артефакта и его версию Git / SVN /… в файл манифеста JAR, а затем получить доступ к этой информации во время выполнения с помощью getClass (). GetPackage. getImplementationVersion () . (Вся заслуга Маркуса Крюгера и других коллег.)
Включить версию артефакта Maven в манифест
(Примечание: вы на самом деле не захотите его использовать, если вы также хотите включить ревизию SCM; см. Ниже.)
pom.xml:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< project > ... < build > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-jar-plugin</ artifactId > ... < configuration > < archive > < manifest > < addDefaultImplementationEntries >true</ addDefaultImplementationEntries > < addDefaultSpecificationEntries >true</ addDefaultSpecificationEntries > </ manifest > </ archive > </ configuration > ... </ plugin > </ plugins > </ build > ... </ project > |
Результирующий файл MANIFEST.MF файла JAR будет затем включать следующие записи со значениями из указанных свойств:
1
2
3
4
5
6
7
8
9
|
Built-By: ${user.name} Build-Jdk: ${java.version} Specification-Title: ${project.name} Specification-Version: ${project.version} Specification-Vendor: ${project.organization.name Implementation-Title: ${project.name} Implementation-Version: ${project.version} Implementation-Vendor-Id: ${project.groupId} Implementation-Vendor: ${project.organization.name} |
(Спецификация-поставщик и реализация-поставщик происходят из организации / названия POM.)
Включить ревизию SCM
Для этого вы можете использовать плагин Build Number Maven, который создает свойство $ {buildNumber}, или извлечь его из переменных среды, переданных Jenkins или Hudson (SVN_REVISION для Subversion, GIT_COMMIT для Git).
Для одного git вы также можете использовать maven-git-commit-id-plugin, который может либо заменить строки, такие как $ {git.commit.id} в существующих файлах ресурсов (используя фильтрацию ресурсов maven, которую вы должны включить) с фактические значения или выведите их все в файл git.properties.
Давайте используем buildnumber-maven-plugin и создадим записи манифеста явно, содержащие номер сборки (т.е. ревизию)
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
< project > < build > < plugins > < plugin > <!-- Create the property $buildNumber holding the current Git revision --> < groupId >org.codehaus.mojo</ groupId > < artifactId >buildnumber-maven-plugin</ artifactId > < version >1.2</ version > < executions > < execution > < phase >validate</ phase > < goals > < goal >create</ goal > </ goals > </ execution > </ executions > < configuration > < doCheck >false</ doCheck > < doUpdate >false</ doUpdate > </ configuration > </ plugin > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-jar-plugin</ artifactId > < version >2.4</ version > < configuration > < archive > < manifestEntries > < Implementation-Title >${project.name}</ Implementation-Title > <!-- buildNumber is produced at runtime by buildnumber-maven-plugin --> < Implementation-Version >${project.version} ${buildNumber}</ Implementation-Version > </ manifestEntries > </ archive > </ configuration > </ plugin > ... |
Доступ к версии и ревизии
Как упоминалось выше, вы можете получить доступ к записям манифеста из вашего кода через getClass (). GetPackage.getImplementationVersion () и getClass (). GetPackage.getImplementationTitle () .