2009-01-21 106 views
8

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

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

回答

1

我不知道我是否正确理解你。但是我过去为一个需要复制配置文件的项目所做的工作是使用Maven AntRun plugin。我所做的是在流程资源阶段执行插件,并使用Ant复制任务将我的配置文件复制到指定的目录。汇编程序插件在程序包阶段执行,因此如果将它放在正确的位置,它应该可以获取配置文件。希望这可以回答你的问题。

+0

是的我认为这将是手动完成此操作的最简单方法。我只是想知道appassembler插件是否可以为你做到这一点,即从src/etc中获取配置文件,并将它们复制到$ {appname}/etc中。 – lindelof 2009-01-23 09:58:44

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 /主/资源文件,如: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链接有一个很好的描述。

3

你可以试试maven assembly插件。我将它与appassembler插件结合使用。

配置appassembler指向你想要的配置目录名称,如果你不想'等'。程序集插件将所有东西都组装到它自己的输出目录中,所以我将程序集插件配置为将bin和repo目录从appassembler目录复制到它的输出目录中,然后我将它复制到配置文件中(我的是在src/main/config )到预期的配置目录中。这里有一些重复,因为你正在复制appassembler输出,但这并没有真正打扰我。

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

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

3

为乡亲谁是来这个最近有,因为应用程序组装插件,可选参数configurationSourceDirectorycopyConfigurationDirectory的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

0

我一直在寻找的答案,我认为是你的问题,或者至少是非常类似的问题。 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> 
相关问题