【问题标题】:Eclipse Mars. Java Spring - Maven Profile Switch for Build Environments [duplicate]日食火星。 Java Spring - 用于构建环境的 Maven 配置文件切换 [重复]
【发布时间】:2016-02-29 12:47:26
【问题描述】:

@Jarrod Roberson,这个问题中的 Spring 是关于 1.2 版的,所以其他解决方案是不可能的。此解决方案在 applicationContext.xml 中使用简单的 Maven 配置和 Spring 的 PropertyPlaceholderConfigurer。

我已将我使用的 web 应用程序从 Windows XP、Eclipse 3.2 升级到 OS X、Eclipse Mars。

我从火星上的一个动态 Web 项目开始并完成了升级。我已经将它转换为一个 Maven 项目。我希望使用 Maven 配置文件在 DevTest 环境之间切换。

环境仅在 config.properties 不同,后者被拉入 applicationContext.xml。对于 Test,我只打算使用“正确的”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 但这没有任何区别。

任何帮助将不胜感激。

【问题讨论】:

  • 你介意用你的项目结构更新你的帖子吗?

标签: java eclipse spring maven profile


【解决方案1】:

您应该将其放在 src/main/resources 文件夹中,而不是将您的 config.properties 文件放在 src/ 文件夹中.

您的项目结构应如下所示:

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

之后,您必须更改您的 pom.xml 以将您的 config.properties 作为资源。

请注意,过滤器已被删除,因为当您拥有 &lt;filtering&gt;true&lt;/filtering&gt; 时,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 文件夹中。

【讨论】:

  • 谢谢,但它没有达到我的预期/想要的效果。 与顶部相同。从 中删除了 。如上所述添加了 。还是行不通。我期待看到 /src/config.properties 从 dev 更改为 test 版本等,或者至少 WEB-INF/classes/config.properties 在战争中发生变化。但什么都没有。如果我手动切换 config.properties,一切都会按预期工作。所以,只是自动切换不起作用。
  • config.properties 文件的基本路径在哪里? src/main/resources?
  • @Lyndon,检查我更新的答案。我相信它可以做到你提到的。
  • 感谢 aribeiro,它现在正在工作。因为我从动态 Web 应用程序开始,所以文件夹结构不是“纯”Maven。也就是说,我有 src 而不是 src/main/java。但我确实创建了一个 src/main/resources。我将尝试一些变化并报告......
【解决方案2】:

这对我有用:-

<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)。

我的 profiles 文件夹直接位于与 src 相同级别的项目 (webapp) 文件夹下。在配置文件下,我有两个文件夹,devtest,每个文件夹都有各自的 config.properties 文件。

它现在按预期工作,当我更改配置文件时,正确的 config.properties 出现在 WEB-INF/classes 中,准备好被 applicationContext.xml 拾取...

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2016-07-11
    相关资源
    最近更新 更多