Вы можете легко указать 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.nameImplementation-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 () .