1

我已经搜索了一个插件/插件集,maven以将所有依赖项包含在一个 jar 文件中,除了资源文件夹中的配置文件。

我发现assembly插件是包含所有程序集的一个很好的解决方案,并且使用resourcesandexclude标记,我已经排除了配置文件。

但是,问题是如何将这些文件复制到我的 jar 文件旁边的文件夹中?

换句话说,如果我想要一个 jar(包括所有依赖项)和一个包含我的配置(.xml、.properties 文件)的文件夹,我该怎么办。所以,当我想运行它时,我只需将配置文件夹添加到类路径并运行 jar 文件。

谢谢,

PS如果您发现重复的问题具有明确的可接受答案,我将不胜感激。

4

1 回答 1

0

您可以通过在描述符 XML 文件中将格式设置为“dir”来从 maven-assembly-plugin 获取目录输出,如下所示:

<assembly>
    <formats>
        <format>dir</format>
    </formats>
    .....
</assembly>

然后使用dependencySets 和fileSets 来包含或排除您想要的文件。

要获取仅包含配置文件的目录,请使用 fileSet 仅将您想要的文件包含到此新目录中。

您可以使用第二个程序集描述符来构建一个排除配置文件的 jar,然后您可以在类路径中包含目录和 jar。

要对同一个插件进行两次执行,您可以执行以下操作:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-assembly-plugin</artifactId>
     <executions>
         <execution>
             <id>config-dir</id>
             <configuration>
                 ....
             </configuration>
         </execution>
         <execution>
             <id>jar-without-config</id>
             <configuration>
                 ....
             </configuration>
         </execution>
     </executions>
 </plugin>

有关更多详细信息,请参见此处:

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

替代实施

这超出了您的问题范围,更适合另一个问题,但我认为更好的选择是使用像 Spring 这样的框架,它允许您的外部配置文件覆盖您的内部配置文件,在这种情况下,您可以使用默认 jar机制,无需担心排除您的模板配置文件。例如,使用 Spring,您可以执行以下操作:

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:/myproject/defaults.properties</value
            <value>file:${user.home}/myproject.properties</value>
        </list>
    </property>
</bean>

这将从 jar 加载您的内部“defaults.properties”,然后从您的主目录加载“myproject.properties”。在 myproject.properties 中设置的任何值都将覆盖在 defaults.properties 中设置的值。

我希望这会有所帮助。

于 2013-12-30T17:27:35.167 回答