2014-10-26 30 views
0

我想在我的應用中指定一些系統屬性(在編譯時確定)。在Spring Boot Plugin中定義系統屬性

我現在用的是彈簧啓動Maven插件編譯

目前,根據這個問題:Specify system property to Maven project 我嘗試以下設置(然而,這並不工作,因爲它是一個不同的插件)

<plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <mainClass>application.boot.AppStarter</mainClass> 
       <systemProperties> 
        <systemProperty> 
         <name>application.version</name> 
         <value>${application.version}</value> 
        </systemProperty> 
        <systemProperty> 
         <name>release.date</name> 
         <value>${timestamp}</value> 
        </systemProperty> 
       </systemProperties> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

如何指定此插件中的屬性?

+0

spring-boot-maven-plugin只是創建一個可執行的jar。你想用系統屬性做什麼?你的意思是說當你執行生成的jar時你需要在屬性文件中提供一些屬性?重新打包不支持任何systemProperties參數,如http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/maven-plugin/repackage-mojo.html – coderplus 2014-10-26 15:09:01

+0

我想要兩件事。 1)Hermes.version maven pom.xml屬性和2)構建jar的日期可以在我的代碼中訪問。如果它們作爲系統屬性,我可以使用System.getProperty(「」)訪問它們 – mangusbrother 2014-10-26 15:46:19

回答

1

您添加的Java系統屬性只能通過它們添加到的進程訪問。即使您在Maven構建過程中設法添加了一些系統屬性,構建完成後也不會再存在。

如果您將jar發送給其他人,會發生什麼情況。您如何預期這些屬性可用?

解決方案

請參閱本post,看看如何在運行時 訪問artifactId和version以類似的方式,你可以添加時間戳條目以及到src/main/resources/project.properties

buildTimestamp=${timestamp} 

timestamp不是預定義的屬性,如project.versionproject.artifactId。因此,您必須設置從Maven屬性${maven.build.timestamp}中提取時間戳,並將其設置爲您的timestamp屬性的值。這已在this question中得到解答。

+0

雖然它正在嘗試成功讀取屬性,但我得到了:無法解析佔位符'property.name'字符串值'$ { property.name}' – mangusbrother 2014-10-26 17:01:24

+0

類似的東西? http://stackoverflow.com/questions/20244696/could-not-resolve-placeholder-in-string-value – coderplus 2014-10-26 17:10:45

+0

我的屬性正在被讀取,就好像我把它們作爲正常值讀取成功。如果我使用$ {},但它不會 – mangusbrother 2014-10-26 17:40:43

相關問題