【问题标题】:Where should I put application configuration files for a Maven project?我应该将 Maven 项目的应用程序配置文件放在哪里?
【发布时间】:2010-10-02 16:11:53
【问题描述】:

我正在使用Maven Application Assembler 插件从我的Java 项目中生成独立的可执行文件。应用程序读入配置文件,包括 Spring 文件。 Application Assembler 插件有一个选项(默认激活)将 etc/ 目录添加到应用程序的类路径,但是我应该怎么做才能让插件将我的配置文件复制到这个目录?

或者更一般地说,在 Maven 中,不应打​​包在工件中的应用程序配置文件的犹太洁食位置在哪里?

【问题讨论】:

    标签: spring maven-2


    【解决方案1】:

    您还可以使用资源过滤: http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

    开启过滤:

    ...
    <build>
    ...
    <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
          </resource>
        </resources>
    ...
    </build>
    ...
    

    在 src/main/resources 下创建一个文件,例如:application.properties

    application.properties

    configprop.1=${param1}
    configprop.2=${param2}
    

    然后设置一个配置文件并在 settings.xml 中设置一些属性 根据这是开发版本还是生产版本设置不同的属性。 见:http://maven.apache.org/guides/introduction/introduction-to-profiles.html

    我设置了不同的属性,具体取决于这是构建服务器、开发还是生产部署

    mvn -Denv=dev || mvn -Denv=dev-build || mvn -Denv=production

    maven 链接有很好的描述。

    【讨论】:

      【解决方案2】:

      对于最近接触到这一点的人来说,自 1.1 版以来的 Application Assembler 插件,可选参数 configurationSourceDirectorycopyConfigurationDirectory。请在下面的示例 POM.xml 提取中找到它们:

      <configuration>
        <!-- Set the target configuration directory to be used in the bin scripts -->
        <configurationDirectory>conf</configurationDirectory>
        <!-- Copy the contents from "/src/main/config" to the target
            configuration directory in the assembled application -->
        <copyConfigurationDirectory>true</copyConfigurationDirectory>
        <!-- Include the target configuration directory in the beginning of
            the classpath declaration in the bin scripts -->
        <includeConfigurationDirectoryInClasspath>
          true
        </includeConfigurationDirectoryInClasspath>
      ...
      </configuration>
      

      更多信息是here

      【讨论】:

        【解决方案3】:

        您可以尝试使用 maven 程序集插件。我将它与 appassembler 插件结合使用。

        如果您不想要“等”,请将 appassembler 配置为指向您想要的配置目录名称。程序集插件在其自己的输出目录中组装所有内容,因此我配置程序集插件以将 bin 和 repo 目录从 appassembler 目录复制到其输出目录中,然后我让它复制配置文件(我的在 src/main/config ) 进入预期的配置目录。这有一些重复,因为您正在复制 appassembler 输出,但这并没有真正困扰我。

        所以你在执行程序集插件后得到的是你的 bin、repo 和 config dir 都是程序集输出目录下的对等目录。如果您愿意,您可以将其配置为具有不同的结构,我只是希望我的能够镜像 appassembler 结构。

        好消息是您还可以配置程序集插件以将二进制文件更改为可执行文件,我无法看到如何使用 appassembler。而且,如果您随后将 appassembler:assemble 和 assembly:single 目标绑定到 package 阶段,您所要做的就是“mvn package”,它会组装所有内容。

        【讨论】:

          【解决方案4】:

          我不知道我是否理解正确。但是我过去为需要复制配置文件的项目所做的是使用Maven AntRun plugin。我所做的是在 process-resources 阶段执行插件,并使用 Ant 复制任务将我的配置文件复制到指定目录。 Assembler 插件在打包阶段执行,因此如果您将其放在正确的位置,它应该会提取您的配置文件。希望这能稍微回答你的问题。

          【讨论】:

          • 是的,我认为这将是手动执行此操作的最简单方法。我只是想知道 appassembler 插件是否可以为您执行此操作,即从 src/etc 中获取配置文件并将它们复制到 ${appname}/etc。
          【解决方案5】:

          我一直在寻找我认为是您的问题的答案,或者至少是一个非常相似的问题。 Maven 允许您使用maven-resources-plugin 指定资源目录。我的资源目录之一中有一些配置文件。我注意到通过将这些文件的副本放在您提到的 etc/ 目录中(位于我的 CLASSPATH 的开头),我可以更改这些文件中的值以在运行时使用。然后,我希望默认情况下使用资源目录中所有内容的副本创建该 etc/ 目录。来自 maven-resources-plugin 的 copy-resources 目标允许我这样做。左侧边栏中的示例 > 复制资源中的这节(我在这篇文章中仅限于 2 个链接)对我有什么帮助:

          <project>
            ...
            <build>
              <plugins>
                <plugin>
                  <artifactId>maven-resources-plugin</artifactId>
                  <version>2.6</version>
                  <executions>
                    <execution>
                      <id>copy-resources</id>
                      <!-- here the phase you need -->
                      <phase>validate</phase>
                      <goals>
                        <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                        <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
                        <resources>          
                          <resource>
                            <directory>src/non-packaged-resources</directory>
                            <filtering>true</filtering>
                          </resource>
                        </resources>              
                      </configuration>            
                    </execution>
                  </executions>
                </plugin>
              </plugins>
              ...
            </build>
            ...
          </project>
          

          【讨论】:

            猜你喜欢
            • 2011-06-10
            • 2017-02-13
            • 2011-04-06
            • 2019-04-18
            • 2019-04-10
            • 2010-09-05
            • 2016-03-30
            • 2011-03-04
            • 1970-01-01
            相关资源
            最近更新 更多