2016-02-29 21 views
0

@Jarrod Roberson,此问题中的Spring是关于1.2版的,所以其他解决方案是不可能的。该解决方案在applicationContext.xml中使用了简单的Maven配置和Spring的PropertyPlaceholderConfigurer。Eclipse Mars。 Java Spring - 用于构建环境的Maven Profile开关

我已经升级了一个从Windows XP,Eclipse 3.2到OS X,Eclipse Mars的Web应用程序。

我从火星上的Dynamic Web Project开始并完成升级。我已经将它转换为Maven项目。我希望使用Maven Profiles在DevTest环境之间进行切换。

环境仅在config.properties中有所不同,后者被拉入applicationContext.xml。对于测试我只打算出口到与'正确'config.properties战争。

但我不能得到config.properties文件从配置文件中相关的版本切换配置文件时进行更新。

我在pom.xml中: -

<profiles> 
    <profile><!-- The configuration of the development profile --> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build.profile.id>dev</build.profile.id> 
     </properties> 
    </profile> 
    <profile><!-- The configuration of the test profile --> 
     <id>test</id> 
     <properties> 
      <build.profile.id>test</build.profile.id> 
     </properties> 
    </profile> 
</profiles> 

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <filters> 
     <filter>profiles/${build.profile.id}/config.properties</filter> 
    </filters> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

我觉得我很接近,但缺少的东西。我尝试添加maven-resources-plugin,但没有任何区别。

任何帮助将不胜感激。

+0

你介意用你的项目结构更新你的文章? – aribeiro

回答

1

而不必你config.properties文件放置在的src/文件夹,你应该有它的的src/main /资源文件夹内的。

你的项目结构应该是这样的:

project-root 
    |_ src 
     |_ main 
     |_ java 
     |_ resources 
      |_ profiles 
      |_ dev 
       |_ config.properties 
      |_ test 
       |_ config.properties 
     |_ webapp 
      |_ WEB-INF 

之后,你已经改变你的的pom.xml以包括您config.properties作为一种资源。

并注意过滤器已被删除,因为当您有<filtering>true</filtering>时,Maven已经在过滤您的资源。

的pom.xml看起来就像这样:

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources/profiles/${build.profile.id}</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
      <includes> 
       <include>*.properties</include> 
      </includes> 
     </resource> 
    </resources> 
    ... 
</build> 

最后,你有你config.properties你的WEB-INF/classes文件夹内,根据所选配置文件。

+0

谢谢,但它没有做我期望/想要的。 与顶部相同。从删除。如上所述添加。还是行不通。我期待看到/src/config.properties从dev更改为测试版本等,或者至少可以在战争中更改WEB-INF/classes/config.properties。但没有。如果我手动切换config.properties,一切都按预期工作。所以,这只是自动切换,不工作。 – Lyndon

+0

* config.properties *文件的基本路径在哪里? *的src/main /资源*? – aribeiro

+0

@Lyndon,检查我更新的答案。我相信它符合你所说的。 – aribeiro

0

这为我工作: -

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>profiles/${build.profile.id}</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
      <includes> 
       <include>*.properties</include> 
      </includes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

我使用的是动态Web文件夹结构不是一个 '纯粹' 的Maven文件夹结构(例如的src/main/JAVA)。

型材文件夹下直接在同一水平SRC项目(Web应用程序)文件夹中。在配置文件下,我有两个文件夹,分别为dev测试各自具有其各自的config.properties文件。

现在正常工作,当我改变配置文件的正确config.properties出现在准备通过applicationContext.xml中拾起WEB-INF/classes中......