我正在使用Maven Application Assembler插件从我的Java项目生成独立的可执行文件。应用程序读入配置文件,包括Spring文件。 Application Assembler插件有一个选项(默认激活),可以将etc /目录添加到应用程序的类路径中,但是如何让插件将配置文件复制到此目录中呢?
或者更一般地说,Maven中应用程序配置文件的kosher位置在哪里不应该打包在工件中?
答案 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>