Мое решение для стандартного плагина Maven WAR
Добавьте тег ресурсов в ваш раздел сборки, который включает фильтрацию (он же «Поиск и замена»):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
....
<build>
Затем в свой src / main / resources добавьте файл version.properties, содержащий любые переменные фильтра, которые соответствуют одной из стандартных переменных сборки maven (вы также можете использовать функцию фильтрации для загрузки своих собственных переменных):
pom.version=${pom.version}
Теперь, когда вы выполняете «пакет maven» или установку maven, он копирует файл version.properties в классы WEB-INF / и выполняет поиск и замену, чтобы добавить версию pom в файл.
Чтобы добиться этого с помощью Java, используйте такой класс, как:
public class PomVersion {
final private static Logger LOGGER = LogManager.getLogger(PomVersion.class);
final static String VERSION = loadVersion();
private static String loadVersion() {
Properties properties = new Properties();
try {
InputStream inStream = PomVersion.class.getClassLoader().getResourceAsStream("version.properties");
properties.load(inStream);
} catch (Exception e){
LOGGER.warn("Unable to load version.properties using PomVersion.class.getClassLoader().getResourceAsStream(...)", e);
}
return properties.getProperty("pom.version");
}
public static String getVersion(){
return VERSION;
}
}
Теперь вы можете просто вызвать PomVersion.getVersion (), чтобы поместить номер версии файла pom на страницу. Вы также можете присвоить файлу WAR такой же номер, используя переменную фильтра в finalName в файле pom.xml:
<build>
<finalName>my-killer-app-${pom.version}</finalName>
...
</build>
так что теперь, если вы установили версию своего приложения в pom на 01.02.879:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.killer.app</groupId>
<artifactId>my-killer-app</artifactId>
<packaging>war</packaging>
<name>This App Will Rule The World</name>
<version>01.02.879</version>
...
</project>
когда вы выполняете "mvn install", имя файла войны также включает номер версии:
my-killer-app-01.02.879.war
наконец, если вы интенсивно используете Spring, например SpringMVC / SpringWebFlow, вы можете создать одноэлементный компонент службы, который использует этот класс, чтобы избежать ссылки на класс низкого уровня по имени:
@Service("applicationVersion")
public class ApplicationVersion {
final static String VERSION = PomVersion.getVersion();
public String getVersion() {
return VERSION;
}
}