具有不同配置文件的 Maven 配置文件

Maven Profile with different config files

我的项目结构看起来像这样

-src/main/java
-src/main/resources
 -dev
  -app.properties
 -prod
  -app.properties
 -sandbox
   -app.properties

像这样定义了一个 Maven 配置文件

<profiles>
    <profile>
      <id>dev</id>
      <properties>
        <build.profile>dev</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources/dev</directory>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>prod</id>
      <properties>
        <build.profile>prod</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources/prod</directory>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>sandbox</id>
      <properties>
        <build.profile>sandbox</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources/sandbox</directory>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>

我正在尝试做的是在我触发正确的配置文件时从正确的子文件夹复制正确的属性,例如 mvn -pdev 安装 。将让 Maven 从 src/main/resource/dev 文件夹中复制 app.properties 文件,然后放入我正在构建的 jar

我的罐子看起来像这样:

  +dev
  +prod
  +sandbox
  +META-INF
  +com
  -app.properties

问题是 5 个文件夹和一个属性文件,我不想要 dev prod 沙箱文件夹。

也许您有一个插件不遵守构建部分中的资源条目并使用 src/main/resources 作为资源文件夹。在那种情况下,我会像这样更改文件夹结构:

src  
 - main  
  - resources-dev
  - resources-prod
  - resources-sandbox

并更改构建部分中的文件夹名称。这样你就不会干扰标准的 maven 文件夹结构。

dunni 的答案会起作用,但我是这样做的

  1. 将子文件夹放入名为 src/main/profiles 的文件夹中,如果您使用的是 eclipse,请务必将此文件夹添加为 "source folder"。 所以项目看起来像这样

    -src/main/resource

    -src/main/profiles

    -prod
    -dev 
    -ist
    

注意:您可以将所有通用且永不更改的内容放入资源文件夹等 log4j.properties 然后将配置文件特定的分别放入每个子文件夹中。

最终的个人资料部分如下所示

<profiles>
    <profile>
      <id>dev</id>
      <properties>
        <build.profile>dev</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/profiles/dev</directory>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>prod</id>
      <properties>
        <build.profile>prod</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/profiles/prod</directory>
          </resource>
        </resources>
      </build>
    </profile>
    <profile>
      <id>sandbox</id>
      <properties>
        <build.profile>sandbox</build.profile>
      </properties>
      <build>
        <resources>
          <resource>
            <directory>src/main/profiles/sandbox</directory>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>

我这样做的原因是默认情况下 Maven 试图将 /resource 文件夹中的所有内容复制到 jar 中。

但是使用 jar 插件我可以得到我想要的东西,但我正在努力保持我的 pom 简单。

我在那里遇到的主要问题是如何从 /resource 文件夹中排除文件。如果有人知道更好的方法,请发表评论