Maven资源插件符号链接处理

16
在Maven项目的 src/test/resources 文件夹中存在一个相对符号链接。
使用插件版本2.6时,实际文件被复制。
在更新到3.0.1版本后,它会复制链接而不是文件,并且在后续运行(无需清理)失败(mvn -e显示是由于FileAlreadyExistsException引起的)。
是否有配置选项可以恢复先前版本的行为?
我同意,将链接作为测试资源真的很糟糕。
2个回答

13

这是maven-resources-plugin中已知的一个bug:MRESOURCES-237 资源插件在3.0.x中更改了符号链接的处理方式,破坏了现有的行为,尽管已知1年半之久,但仍未修复。

不幸的是,目前还没有配置选项。引入此选项(并将其默认设置为“跟随符号链接”而不是保留副本)将解决此问题。

目前唯一的解决方案是降级maven-resources-plugin。我也从2.6升级,现在刚刚降级到了2.7(2.x系列的最后一个版本),可以证实它可以解决这个bug,并正确地复制符号链接的内容。

更新:由于“标记无效”问题(maven-filtering中的一个bug),如果你不需要任何新的2.7功能或者必须用更新的maven-filtering 1.3(或者可能更高版本)修改插件定义,应该考虑继续使用2.6。


2

我可以确认这种行为在 maven-resources-plugin 3.3.1 中仍然存在。

然而,通过遵循 @mirabilos 提供的 Apache 问题链接,我发现了一个更近期的评论,解决了我的问题。具体来说, Thorsten Glaser 在 07/Jan/22 22:40 的评论中透露了他的发现。

只要你不介意过滤,插件就会复制你的符号链接文件,而不是符号链接本身。

结果发现,对于每个目录,有三种不同的情况需要应用:

    <filtering>true</filtering> — here, the symlinks are always followed because the files themselves are possibly manipulated
    <filtering>false</filtering> with symlinks followed by default (m-r-p 2.x behaviour)
    <filtering>false</filtering> with symlinks copied as-is (m-r-p 3.0/3.1 behaviour)

因此,一个<resource>定义的例子可能是:

<resource>
    <directory>src/test/resources</directory>
    <!-- Enable filtering as workaround for symlink issue: https://issues.apache.org/jira/browse/MRESOURCES-237 -->
    <filtering>true</filtering>
    <includes>
        <include>my_symlinked_file</include>
    </includes>
</resource>

1
对于未来的读者:<resource>元素通常放置在pom.xml文件的project->build->resources分支中。 - undefined

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