您可以通过在描述符 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 中设置的值。
我希望这会有所帮助。