【问题标题】:Maven assembly plugin warning "The assembly descriptor contains a filesystem-root relative reference"Maven 程序集插件警告“程序集描述符包含文件系统根相对引用”
【发布时间】:2015-04-14 13:00:53
【问题描述】:

从一些程序集插件版本开始,maven 构建发出以下警告:

[警告] 程序集描述符包含一个文件系统根相关文件 参考,不兼容跨平台/

对此是否有任何推荐的即用型解决方案?直接谷歌搜索给我提供了很多垃圾,没有真正的帮助。重新检查 Maven 程序集插件帮助没有为我提供答案,也许其他人有更好的搜索技能并且可以提供帮助。

更新

是的,这可能是因为类似于 Linux 的outputDirectory,但我应该如何重写它以使其可移植?看了汇编插件文档,没有找到任何可移植性指南。

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

【问题讨论】:

  • 你能显示程序集描述符吗?它可能会表明您以某种方式引用了绝对路径(/a/b/c),这是为了确保跨环境构建可移植性而应避免的事情
  • 是的,如果您正在创建一个不能包含文件系统根条目的 tar 文件...顺便说一句,就是这种情况。真的没有意义。
  • 如您所见, outputDirectory 定义了一个 /,这意味着将所有内容提取到始终相同的位置。除此之外,此位置仅限于 root 帐户。此外,问题是您为什么使用fileSets 来获取src/main/resources 文件夹?有什么特殊原因?
  • 是的,这是生成的 .tar.gz 程序集,因此“/”对 root 帐户没有任何影响,src/main/resources 不会进入生成的工件 JAR,而是转到包含所需附加内容的 .tar.gz 包脚本之类的东西。我只是从未尝试过不通过&lt;outputDirectory/&gt; 提供任何东西。所以@Torsten 的回答100% 适合我。
  • 几天前不得不挠痒痒,所以我想我不妨分享一下。很高兴我能帮上忙。

标签: maven cross-platform maven-3 maven-assembly-plugin


【解决方案1】:

有效的解决方案是指定空的outputDirectory

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

【讨论】:

  • 留空并不总是可取的,如果需要设置应该怎么办?
  • 如果你想在这里指定一个目录,那么就这样做 - 这就是为什么这个参数仍然在这里。只需避免以“/”开头的绝对路径即可。
  • 或自闭&lt;outputDirectory/&gt;
  • 另一种选择:使用. 而不是/,即:&lt;outputDirectory&gt;.&lt;/outputDirectory&gt;
  • @PrashantSharma 使用 ${file.separator} 查看其他答案
【解决方案2】:

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

因此,更明确地说,您还可以通过以下方式避免警告:

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

【讨论】:

  • IMO 这是最好的方法,因为它不仅适用于任何路径 / 也适用于 /foo/bar
  • 能否详细说明我将如何指定 file.separator 属性以同时适用于 *nix 平台和 windows 平台?
  • @vivekmore 该属性由 maven 提供,并且适用于 nix 和 windows
  • patforna,您是否真的在 Windows 系统上尝试过这个“更明确”的部分?我认为它实际上并没有消除警告......我认为 Maven 正在抱怨以任何斜线开头的设置。我可能是错的。
  • @Barett 只在 *nix 上测试过。
【解决方案3】:

请注意,除了/ 之外,这也可能发生在其他位置。上面的答案是正确的,但不要涵盖这种情况。

在你的 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>

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2012-05-02
    • 2020-12-26
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多