我应该在哪里放置Maven项目的应用程序配置文件?

时间:2009-01-21 11:59:43

标签: spring maven-2

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

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

5 个答案:

答案 0 :(得分:6)

您还可以使用资源过滤: 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 =生产

maven链接有很好的描述。

答案 1 :(得分:4)

对于最近出现这种情况的人来说,自应用程序汇编程序插件1.1版以来,可选参数 configurationSourceDirectory copyConfigurationDirectory 。请在下面的示例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

答案 2 :(得分:3)

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

如果您不想要'etc',请将appassembler配置为指向配置目录所需的任何名称。程序集插件在其自己的输出目录中汇编所有内容,因此我配置程序集插件将bin和repo dirs从appassembler目录复制到其输出目录中,然后我将其复制配置文件(我的是在src / main / config中)进入预期的配置目录。这有一些重复,因为你正在复制appassembler输出,但这并没有真正打扰我。

因此,执行程序集插件后的内容是bin,repo和config dir都是程序集输出目录下的所有对等目录。如果您愿意,可以将其配置为具有不同的结构,我只是希望我的镜像组合器结构。

好处是您还可以配置程序集插件以将二进制文件更改为可执行文件,我无法看到如何使用appassembler。而且,如果你然后绑定appassembler:汇编和汇编:单个目标到包阶段,你所要做的就是'mvn package',它汇集了所有东西。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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