我应该在哪里放置Maven项目的应用程序配置文件?
我正在使用Maven Application Assembler插件从我的Java项目生成独立的可执行文件。应用程序读入配置文件,包括Spring文件。应用程序组装者插件有一个选项(默认为激活),用于将etc /目录添加到应用程序的类路径中,但我应该如何让插件将我的配置文件复制到此目录中?我应该在哪里放置Maven项目的应用程序配置文件?
或者更一般地说,Maven的应用程序配置文件的kosher位置在哪里,不应该打包在工件中?
我不知道我是否正确理解你。但是我过去为一个需要复制配置文件的项目所做的工作是使用Maven AntRun plugin。我所做的是在流程资源阶段执行插件,并使用Ant复制任务将我的配置文件复制到指定的目录。汇编程序插件在程序包阶段执行,因此如果将它放在正确的位置,它应该可以获取配置文件。希望这可以回答你的问题。
您还可以使用资源过滤: 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 /主/资源文件,如:application.properties中
application.properties
configprop.1=${param1}
configprop.2=${param2}
然后设置一个配置文件并设置一些属性,可能在设置不同属性的settings.xml 中,具体取决于这是dev还是生产版本。 看到:http://maven.apache.org/guides/introduction/introduction-to-profiles.html
我有不同的属性设置取决于如果这是构建服务器,开发或生产部署
MVN -Denv = ||开发mvn -Denv = dev-build || mvn -Denv =生产
maven链接有一个很好的描述。
你可以试试maven assembly插件。我将它与appassembler插件结合使用。
配置appassembler指向你想要的配置目录名称,如果你不想'等'。程序集插件将所有东西都组装到它自己的输出目录中,所以我将程序集插件配置为将bin和repo目录从appassembler目录复制到它的输出目录中,然后我将它复制到配置文件中(我的是在src/main/config )到预期的配置目录中。这里有一些重复,因为你正在复制appassembler输出,但这并没有真正打扰我。
因此,执行程序集插件后,您的bin,repo和config dir都是程序集输出目录下的对等目录。如果您愿意,您可以将其配置为具有不同的结构,我只是希望我能够反映appassembler结构。
好的是,您还可以配置程序集插件来将您的二进制文件更改为可执行文件,我无法看到如何处理appassembler。而且,如果你再绑定appassembler:汇编和汇编:单个目标到包阶段,你所要做的就是'mvn package',它将所有东西组装起来。
为乡亲谁是来这个最近有,因为应用程序组装插件,可选参数configurationSourceDirectory和copyConfigurationDirectory的1.1版本。请发现它们在下面的例子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
我一直在寻找的答案,我认为是你的问题,或者至少是非常类似的问题。 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>
是的我认为这将是手动完成此操作的最简单方法。我只是想知道appassembler插件是否可以为你做到这一点,即从src/etc中获取配置文件,并将它们复制到$ {appname}/etc中。 – lindelof 2009-01-23 09:58:44