Как заставить Java MANIFEST.MF включить Maven Version Number
У меня в моем проекте pom.xml есть следующее: я думаю, должна отображаться версия Maven, используемая в полученном файле WAR:
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
</manifest>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
<Build-Host>${agent.name}</Build-Host>
<Build-User>${user.name}</Build-User>
<Build-Maven>Maven ${maven.version}</Build-Maven>
<Build-Java>${java.version}</Build-Java>
<Build-OS>${os.name}</Build-OS>
<Build-Label>${project.version}</Build-Label>
<Build-Path>${basedir}</Build-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
...
</plugins>
...
</build>
Созданный MANIFEST.MF выглядит правильно, кроме строки Build-Maven, в которой ${maven.version} не заменяется фактическим номером версии 3.0.4 в этом случае.
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: stocjon
Build-Jdk: 1.6.0_35
Build-Host:
Build-Java: 1.6.0_35
Build-Label: 1.0.0-SNAPSHOT
Build-Maven: Maven ${maven.version}
Build-OS: Windows XP
Build-Path: C:\Development\project_name
Build-Time: 15:38:50 21-Sep-2012
Build-User: user_name
Любые идеи, почему версия Maven не заполняется в MANIFEST.MF?
Помощь будет очень оценена.
Спасибо
Джон
Ответы
Ответ 1
Вам нужно добавить этот плагин:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>maven-version</goal>
</goals>
</execution>
</executions>
</plugin>
Подробнее о здесь.
Ответ 2
Нам больше не нужен build-helper-maven-plugin, поскольку функция (MSHARED-38) была добавлен в компонент maven-archiver: 2.5 в феврале 2012 года (примечания к выпуску).
И этот компонент используется плагинами Maven, такими как maven-jar-plugin, maven-war-plugin, maven-ear-plugin и т.д.
Версии этих плагинов с использованием этой функции:
- maven-jar-plugin: 2.4 (MJAR-148), выпущенный в феврале 2012 г.
- maven-war-plugin: 2.2 (MWAR-273), выпущенный в феврале 2012 г.
- maven-ear-plugin: 2.8 (MEAR-145), выпущенный в сентябре 2012 г.
- maven-assembly-plugin: 2.4 (MASSEMBLY-634), выпущенный в ноябре 2012 г.
- maven-ejb-plugin: 2.4 (MEJB-56), EDIT: выпущено 24/Aug/14
- и др.
Итак, теперь мы будем иметь эту запись по умолчанию в файле manifest.mf:
Создано: Apache Maven ${maven.version}
Ответ 3
Для полноты - это сработало для меня:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
Это ставит мой манифест -
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Old.Curmudgeon
Build-Jdk: 1.5.0_22
Implementation-Title: JarFileName-1.0.2
Implementation-Version: 1.0.2
Implementation-Vendor-Id: our.id
Ответ 4
Чтобы получить машину сборки, я добавил следующий плагин:
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>project.properties["hostname"] = InetAddress.getLocalHost().getHostName()</source>
</configuration>
</execution>
</executions>
</plugin>
Затем я мог получить имя хост-машины через ${hostname}.
Ответ 5
Посмотрите, как это было предложено jcabi-manifests
: http://manifests.jcabi.com/versioning.html
Кроме того, см. эту запись в блоге для более подробной информации: http://www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html
Ответ 6
По крайней мере, начиная с версии 2.4 плагина maven-jar по умолчанию добавляются следующие записи в файл MANIFEST.MF в META-INF:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: abcUser
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_77
Чтобы добавить версию проекта и другие детали реализации, просто добавьте следующее в maven-jar-plugin (либо в разделе pluginManagement, либо в разделе build- > plugins:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
Чтобы добавить что-то вроде времени сборки, добавьте следующее:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
</manifestEntries>
</archive>
</configuration>
</plugin>
Формат Build-Time можно изменить, используя следующее свойство в разделе <properties>
вашего pom.xml:
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
Вывод всего вышесказанного выглядит примерно так:
Manifest-Version: 1.0
Implementation-Title: UI
Implementation-Version: 2.0.5-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: abcUser
Implementation-Vendor-Id: com.xyz.abc.dbe
Build-Time: 2016-12-23 12:04 UTC
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_77
Implementation-Vendor: XYZ Corporation