maven-jar-plugin包含vs排除

时间:2010-03-15 18:45:22

标签: xml maven-2 pom.xml

我有一个包含maven-jar-plugin部分的现有pom文件。它运行test-jar目标,目前不包括几个目录:

<excludes>
     <exclude>...</exclude>
     <exclude>...</exclude>
     <exclude>somedir/**</exclude>
 </excludes>

我需要在somedir目录中包含一个文件,但忽略somedir目录中的其余文件。我已经读过,包括优先于排除,所以我添加了类似下面的内容(之前没有包含部分):

<includes>
    <include>somedir/somefile.xml</include>
</includes>

这最终创建了一个用于测试的jar文件,其中只有几个文件(只是META-INF中的东西)。我包含的文件也不在jar中。我期望的是一个jar,它与我在包含一个额外文件的更改之前创建的jar相同。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:11)

首先,如果您未指定任何includes,则maven jar插件将使用**/**作为默认模式(请参阅o.a.m.p.j.AbstractJarMojo),即它将包含所有内容。如果您覆盖此默认模式,该插件显然只会包含您告诉他包含的内容。

其次,目录扫描最后由o.c.p.u.DirectoryScanner完成,这就是该类的javadoc所说的内容:

 * The idea is simple. A given directory is recursively scanned for all files
 * and directories. Each file/directory is matched against a set of selectors,
 * including special support for matching against filenames with include and
 * and exclude patterns. Only files/directories which match at least one
 * pattern of the include pattern list or other file selector, and don't match
 * any pattern of the exclude pattern list or fail to match against a required
 * selector will be placed in the list of files/directories found.

因此,使用您当前的includesexcludes模式集,只有 ONE 文件会与包含模式匹配,但也会匹配排除模式,因此不会被选中并且您获得了几乎为空的存档(只有默认清单,请参阅o.a.m.p.j.AbstractJarMojo#createArchive())。

我无法在此向您提供确切的解决方案,但您显然需要重新考虑包含/排除文件的方式(例如,添加更多includes模式,删除<exclude>somedir/**</exclude>或使用{{1}仅限,或仅使用includes