我有一个包含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相同。
我在这里缺少什么?
答案 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.
因此,使用您当前的includes
和excludes
模式集,只有 ONE 文件会与包含模式匹配,但也会匹配排除模式,因此不会被选中并且您获得了几乎为空的存档(只有默认清单,请参阅o.a.m.p.j.AbstractJarMojo#createArchive()
)。
我无法在此向您提供确切的解决方案,但您显然需要重新考虑包含/排除文件的方式(例如,添加更多includes
模式,删除<exclude>somedir/**</exclude>
或使用{{1}仅限,或仅使用includes
。