Получение версии проекта maven и идентификатора артефакта от pom во время работы в Eclipse
Я искал, как получить имя приложения (идентификатор артефакта) и версию из maven pom или манифеста, когда натолкнулся на этот вопрос Получить версию артефакта Maven во время выполнения.
Вышесказанное работает для меня, когда я упаковываю проект, но у меня не получается заставить работать что-либо, когда я пытаюсь запустить программу с помощью eclipse. Я пытался использовать метод.properties при сборке, так как предполагал, что это не зависит от пакета, но я все еще не получаю результат. Если у кого-то есть идея или решение этой проблемы, это будет с благодарностью.
Моя последняя попытка ниже. Он использует манифест, когда упакован (что работает) и пытается получить файл.properties при запуске в eclipse.
String appVersion = getClass().getPackage().getImplementationVersion();
if(appVersion == null || "".equals(appVersion)) {
appVersion = Glob.getString(appVersion);
if(appVersion == null || "".equals(appVersion)) {
System.exit(0);
}
}
1 ответ
Создать файл свойств
src/main/resources/project.properties
с содержанием ниже
version=${project.version}
artifactId=${project.artifactId}
Теперь включите maven фильтрацию ресурсов
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
так что этот файл обрабатывается в
target/classes/project.properties
с некоторым содержанием, похожим на это
version=1.5
artifactId=my-artifact
Теперь вы можете прочитать этот файл свойств, чтобы получить то, что вы хотите, и это должно работать каждый раз.
final Properties properties = new Properties();
properties.load(this.getClassLoader().getResourceAsStream("project.properties"));
System.out.println(properties.getProperty("version"));
System.out.println(properties.getProperty("artifactId"));
Простое решение с maven 4 теперь - добавить VersionUtil
статический метод в вашем пакете:
package my.domain.package;
public class VersionUtil {
public static String getApplicationVersion(){
String version = VersionUtil.class.getPackage().getImplementationVersion();
return (version == null)? "unable to reach": version;
}
}
Дело в том, что вам нужен этот плагин "mave-war-plugin" в помпе проекта, говорящий, что вы хотите добавить addDefaultImplementationEntries
:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
...
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
...
Затем позвоните в VersionUtil.getApplicationVersion()
из какого-то места в вашем коде.