Доступ к версии проекта maven в конфигурационных файлах Spring - PullRequest
5 голосов
/ 08 октября 2010

Я хотел бы отобразить текущую версию моего веб-приложения на странице. Проект основан на Maven, Spring и Wicket.

Я бы хотел как-то получить значение ${project.version} maven и использовать его в моих XML-файлах Spring, аналогично тому, как я использую Spring PropertyPlaceholderConfigurer для чтения файла свойств для настроек, которые я использую в своем приложении.

Если бы в моей конфигурации Spring была доступна переменная maven project.version, я мог бы сделать что-то вроде этого:

<bean id="applicationBean" class="com.mysite.web.WicketApplication">
<property name="version"><value>${project.version}</value></property>
</bean>

Как я могу это сделать?

Ответы [ 5 ]

11 голосов
/ 08 октября 2010

Вы можете использовать Maven filtering , как уже предлагалось.

Или вы можете просто прочитать файл pom.properties, созданный Maven в каталоге META-INF напрямую с помощью Spring:

<util:properties id="pom" 
     location="classpath:META-INF/groupId/artifactId/pom.properties" />

и используйте боб.

Единственным недостатком более позднего подхода является то, что pom.properties создается во время package фазы (и не будет там, скажем, test).

7 голосов
/ 08 октября 2010

Один из методов - использовать фильтрацию мавенов.Вы можете вставить заполнители в файлы ресурсов, например, которые затем будут заменены значениями из сборки на этапе ресурсов.

Посмотрите "Как мне отфильтровать файлы ресурсов?"в руководстве Maven

1 голос
/ 21 мая 2015

Используйте аннотацию @PropertySource для добавления файла pom.properties, созданного Maven, в каталог META-INF. Обратите внимание, что файл не существует до фазы package . Чтобы избежать ошибок во время тестирования, установите ignoreResourceNotFound = true и добавьте значение по умолчанию для читаемого свойства (например, none ниже).

@Service
@PropertySource(value = "classpath:META-INF/maven/io.pivotal.poc.tzolov/hawq-rest-server/pom.properties", ignoreResourceNotFound=true)
public class MyClass {
    private String applicationPomVersion;

    @Autowired
    public MyClass(@Value("${version:none}") String applicationVersion ) {
        this.applicationPomVersion = applicationVersion;
    }

    public String getApplicationPomVersion() {
        return this.applicationPomVersion;
    }
}
0 голосов
/ 04 апреля 2016

Я думаю, что правильный способ сбора версии приложения описан в этой теме: https://stackoverflow.com/a/2713013/840635 - getClass().getPackage().getImplementationVersion().

0 голосов
/ 01 августа 2011

Мы разворачиваем файлы свойств за пределами веб-приложения. Затем файлы могут быть отфильтрованы во время развертывания.

При использовании Jetty можно поместить файл в папку $ JETTY_HOME / resources или использовать функцию extraClassPath для загрузки файла свойств во время выполнения.

...