2016-08-16 6 views

答えて

26

Springブートアプリケーションでmavenプロジェクトバージョンを取得する方法に関するいくつかの調査と試行の後、私のために何かを見つけることができませんでした。

マニフェストの使用は、クラスローダーの問題のために腐敗したパスです。つまり、私の場合は私のアプリケーションではない最初のマニフェストのSpringが見つかりました。

私が見つけた1つの解決策は、リソースファイルのプロパティをフィルタリング(置換)するためにmavenリソースプラグインを使用することです。この場合、スプリングapplication.properties

以下は、この作業を行う手順です。

[email protected]@ 
    [email protected]@ 
    [email protected]@ 

お知らせ代わりに$ {プロパティ}の@プロパティ@:application.propertiesファイルで

<resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>application.properties</include> 
      </includes> 
     </resource> 
    </resources> 

:POMで

は、次の定義によるフィルタリングリソースを有効にします。ファイルapplication.properties

ばねブートスタータ親POMは、のような標準的な$ {}デリミタを再定義する@:

<resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders --> 
    <delimiters> 
     <delimiter>${resource.delimiter}</delimiter> 
    </delimiters> 

一方、このような@value使用春にこれらのプロパティにアクセスすることができる:

@Value("${application.name}") 
private String applicationName; 

@Value("${build.version}") 
private String buildVersion; 

@Value("${build.timestamp}") 
private String buildTimestamp; 

A sample project is available here

+1

基本的には、Springのマニュアルで説明しているとおりです。http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html ドキュメントは、あなたが明示的にリソースフィルタを定義する必要はありません、あなたがSpring Bootの親を使用している場合です。 –

+0

spring-boot-starter-parentは使用しませんが、回答と[section 72.1.1](http://docs.spring.io/spring-boot/)のようなデリミタ設定を追加する必要はありませんでした。 docs/current/reference/html/howto-properties-and-configuration.html)は言う。 – pacoverflow

+2

タイムスタンプは、実際には 'build.timestamp = @ maven.build.timestamp @'のようなものでなければなりません。 – wikier

関連する問題