2014-11-04 770 views
5

我使用的是使用spring引導開發web應用程序,並且想要生成war而不是jar。 http://spring.io/guides/gs/convert-jar-to-war/在使用spring引導和spring-boot-maven-plugin生成war時排除application.properties

但我想從戰爭中排除application.properties,因爲我用@PropertySource(value = "file:${OPENSHIFT_DATA_DIR}/application.properties")獲得對生產環境中的文件路徑:

它以戰爭描述這裏使用從罐子轉換工作非常精細。生成我的抗戰時

  • 此方法的工作,但在Eclipse中我不能運行我的應用程序,因爲根本沒有複製application.properties目標/類:

    <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application.properties</exclude> </excludes> </resource> </resources> </build>

  • 這種方法不工作的時候,我覺得春天啓動了Maven插件不支持packagingExcludes:

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <packagingExcludes>WEB-INF/classes/application.properties</packagingExcludes> </configuration> </plugin> </plugins> </build>

你有另外一個建議嗎?

Thnks

+0

我對這個問題的辦法是剛過保持資源application.properites使用'spring.config.location'參數覆蓋打包配置。例如,我將它設置在Tomcat的上下文文件中,以指向我在生產環境中使用的配置文件。你有沒有嘗試過這樣做,或者這種解決方案不適合你嗎? 或者你可以通過使用不同的Maven構建配置文件進行開發和生產,或許可以實現你正在嘗試做的事情?我的意思是,只有當您使用生產Maven配置文件打包您的應用時,纔會排除application.properties ... – 2014-11-04 20:25:05

+0

我只想在使用maven打包我的戰爭時排除application.properties,其他一切正常。我不想在生成戰爭後刪除application.properties。 – amgohan 2014-11-05 00:09:12

回答

2

我添加的解決方案是我的解壓打包戰爭,刪除文件application.properties並創建一個使用maven-antrun-插件名爲ROOT.war新的戰爭和運行一些Ant任務。

這是我加入到我的插件在pom.xml中:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-antrun-plugin</artifactId> 
<executions> 
    <execution> 
     <id>package</id> 
     <phase>package</phase> 
     <configuration> 
      <target> 
       <unzip src="target/${artifactId}-${version}.${packaging}" dest="target/ROOT/" /> 
       <delete file="target/ROOT/WEB-INF/classes/application.properties"/> 
       <zip destfile="target/ROOT.war" basedir="target/ROOT" encoding="UTF-8"/> 
       <delete dir="target/ROOT"/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
    </execution> 
</executions> 
</plugin> 

我叫我的目標戰爭ROOT.war因爲我使用openshift PaaS的tomcat的,所以我只是複製我ROOT.war並推向我的openshift回購。就是這樣

+0

恕我直言,正確的答案。我需要它稍微扭曲:我想包括'application.properties',但沒有我的個人資料'應用程序 - *。屬性'。而且由於我的ANT時代早已過去,我花了一段時間才弄清楚正確的語法,因此發佈在這裏: '' – 2015-10-21 16:54:40

2

我從你的問題中瞭解到,你想爲你的開發使用application.properties。但是你不想用它來製作。

我會建議使用彈簧配置文件來實現這一點。 在您的屬性文件中

  1. 創建一個用於開發的配置文件。把你所有的開發屬性放在它下面。
  2. 不要在屬性文件中爲生產創建配置文件。
  3. 當您正在開發時,將活動配置文件設置爲開發,以便從您的application.properties文件加載屬性。
  4. 在生產中運行它時,將活動配置文件設置爲生產。儘管application.properties將被加載到您的WAR中,但由於沒有用於生產的配置文件,因此不會加載任何屬性。

我使用YML做了類似的事情。我相信也一定有辦法使用.properties文件做同樣的事情。

spring: 
    profiles.active: development 
-- 
spring: 
    profiles: development 
something: 
    location: USA 
    unit1: Test1 
    unit2: Test2 

你可以使用

-Dspring.profiles.active=production 
+0

是和否。如果將這些配置文件屬性文件存儲在src/main/resources中,則不能從父類加載器加載它們(如將它們放入$ TCHOME/lib中),因爲它們已經捆綁在WAR本身中 – 2015-10-21 16:52:57

1

改變運行時配置文件嘗試使用此解決方案:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.version}</version> 
    <configuration> 
     <addResources>false</addResources> 
    </configuration> 
</plugin> 

<addResources>假</addResources >將繼續屬性時你運行mvn spring-boot:運行

4

請嘗試使用下面的解決方案。這將工作:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

如果使用上述解決方案,同時在Eclipse IDE中運行該項目,你可能會得到錯誤的屬性文件未找到。爲了擺脫這個,你需要添加資源文件夾作爲配置運行(運行配置... - >類路徑 - >用戶條目 - >高級... - >添加文件夾)

1

在Eclipse中運行時,在你的運行配置,你需要指定到春季啓動化子性質的路徑:

--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/ 
0

它即使生成jar包,即使<addResources>false</addResources>

相關問題