Maven汇编插件警告 "该组件描述符包含文件系统根相对引用"

53

从一些汇编插件版本开始,maven构建会发出以下警告:

[WARNING] The assembly descriptor contains a filesystem-root relative reference,which is not cross platform compatible /

是否有推荐的现成解决方案?直接谷歌搜索得到的都是垃圾信息,没有实质性的帮助。重新查看Maven assembly插件的帮助文件也没有为我提供答案,也许其他人有更好的搜索技巧并能提供帮助。

更新

是的,这可能是因为类Linux的outputDirectory,但我该如何重写以使其具有可移植性?查阅了Assembly插件文档,但未找到任何可移植性指南。

<fileSets>
    <fileSet>
        <directory>${basedir}/src/main/resources</directory>
        <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

你能展示一下汇编描述符吗?它可能会显示你以某种方式引用了绝对路径(_/a/b/c/_),这是需要避免的,以确保在不同环境中构建的可移植性。 - Tome
如果您正在创建一个无法包含文件系统根目录条目的tar文件,那么是这种情况...顺便说一下,这并没有真正意义上的意义。 - khmarbaise
1
正如您所看到的,outputDirectory 定义了一个 /,这将导致提取所有内容到相同的位置。除此之外,该位置仅限于根帐户。此外,问题是为什么要使用 fileSets 来获取 src/main/resources 文件夹?有特殊原因吗? - khmarbaise
是的,这个结果是.tar.gz文件,所以“/”不是根账户,而src/main/resources不会被打包进结果产物JAR中,但是会放进.tar.gz文件里,这个文件里还包含了一些必要的东西例如脚本。我从没试过不通过<outputDirectory/>来提供任何内容。因此@Torsten的回答完全适合我。 - Roman Nikitchenko
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Torsten
3个回答

69

解决方法是指定空的outputDirectory

<fileSets>
    <fileSet>
        <directory>${basedir}/src/main/resources</directory>
        <outputDirectory></outputDirectory>
    </fileSet>
</fileSets>

2
不总是希望它被留空,如果需要设置它应该怎么做呢? - Prashant Sharma
5
如果您想在这里指定一个目录,请这样做——这就是为什么有这个参数的原因。只需避免以“/”开头的绝对路径即可。 - Torsten
2
或者自闭合的 <outputDirectory/> - naXa stands with Ukraine
2
另一个选项是使用 . 代替 /,即:<outputDirectory> . </outputDirectory> - otterrisk
@PrashantSharma 请查看另一个答案,其中使用了 <outputDirectory>${file.separator}</outputDirectory>。 - Craigo

48

使用空的outputDirectory元素是有效的,但如果有人认为它可以被安全删除,我不会感到惊讶。

因此,更明确的做法是,您也可以通过编写以下内容来避免警告:

<outputDirectory>${file.separator}</outputDirectory>

1
在我看来,这是最佳方法,因为它可以适用于任何路径,而不仅仅是/,还包括/foo/bar。 - Nicolas Filotto
1
请问您能否详细说明如何指定file.separator属性以适用于*nix平台和Windows平台? - vivekmore
3
@vivekmore,该属性由Maven提供,并且适用于nix和Windows系统。 - Barett
patforna,你有在Windows系统上尝试过这个“更明确”的部分吗?我不认为它能真正消除警告... 我认为Maven会抱怨从任何斜杠开始的设置。我可能是错的。 - Barett
@Barett 只在 *nix 上测试过这个。 - patforna
确认在Windows上也可以工作,赚得了你的点赞! - escape-llc

8
请注意,这种情况可能发生在除了/之外的其他位置。上述答案是正确的,但不涵盖此情况。
在您的assembly.xml中查找类似以下内容的东西:
<fileSets>
    <fileSet>
        <directory>${basedir}/src/main/resources</directory>
        <outputDirectory>/lib</outputDirectory>         <!-- <<< look for this -->
    </fileSet>
</fileSets>

并将其更改为:

<fileSets>
    <fileSet>
        <directory>${basedir}/src/main/resources</directory>
        <outputDirectory>lib</outputDirectory>
    </fileSet>
</fileSets>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接