Maven 版本/scm 标签/Plexus DirectoryScanner 中的无限递归错误?

Posted

技术标签:

【中文标题】Maven 版本/scm 标签/Plexus DirectoryScanner 中的无限递归错误?【英文标题】:Infinite recursion bug in Maven release / scm tag / Plexus DirectoryScanner? 【发布时间】:2013-05-08 12:16:34 【问题描述】:

我看到我的 Maven 版本在 scm 标记阶段失败,并且在发布插件中出现了明显的无限递归:

... (hundreds more times)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scandir(DirectoryScanner.java:491)
at org.codehaus.plexus.util.DirectoryScanner.scan(DirectoryScanner.java:346)
at org.codehaus.plexus.util.FileUtils.getFileAndDirectoryNames(FileUtils.java:1886)
at org.codehaus.plexus.util.FileUtils.getFileNames(FileUtils.java:1813)
at org.codehaus.plexus.util.FileUtils.getFileNames(FileUtils.java:1795)
at org.codehaus.plexus.util.FileUtils.getFiles(FileUtils.java:1769)
at org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand.executeTagCommand(SvnTagCommand.java:172)
at org.apache.maven.scm.command.tag.AbstractTagCommand.executeCommand(AbstractTagCommand.java:81)
at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
at org.apache.maven.scm.provider.svn.AbstractSvnScmProvider.executeCommand(AbstractSvnScmProvider.java:388)
at org.apache.maven.scm.provider.svn.AbstractSvnScmProvider.tag(AbstractSvnScmProvider.java:368)
at org.apache.maven.scm.provider.AbstractScmProvider.tag(AbstractScmProvider.java:846)
at org.apache.maven.shared.release.phase.ScmTagPhase.execute(ScmTagPhase.java:127)
...

到目前为止,构建看起来还不错:

[INFO] Working directory: /Users/srowen/Documents/Development/ZXing
[INFO] Tagging release with the label zxing-2.2...
[INFO] Executing: /bin/sh -c cd /Users/srowen/Documents/Development/ZXing && svn --non-interactive copy --file /var/folders/tx/g74p23497xz89k7ngn6_6ykr0000gn/T/maven-scm-1363236967.commit --revision 2758 https://zxing.googlecode.com/svn/trunk https://zxing.googlecode.com/svn/tags/zxing-2.2
[INFO] Working directory: /Users/srowen/Documents/Development/ZXing

有人见过这样的吗?它是否敲响了可能暗示一些当地问题的钟声?这里没有符号链接,也没有特别深的目录结构。

【问题讨论】:

你能显示 pom 文件和完整的堆栈跟踪(可能放在 github 上的 gist 上)以及你使用哪个版本的 Maven,maven-release-plugin? 这里是父 pom.xml 文件的最终版本,它不起作用:code.google.com/p/zxing/source/browse/trunk/… 我使用的是 Maven 3.0.3,以及最新版本的插件 2.4.1。如果需要,我绝对可以提供更多信息。堆栈跟踪没有更多内容:上面,更多相同,下面,只是来自 Maven 框架的一些样板。 您的构建是否挂在“[INFO] 工作目录:”行上?还是过去了?您是否在一段时间后遇到 ScmException(最终由 SvnTagCommand 抛出)?我看到您进行了回滚以删除项目中的“多模块”结构。对于这个“多模块相关”的问题,你猜到了吗? 是的,这是输出的最后一行。 10-15 分钟后,它会以 OutOfMemoryError 失败。是的,无论出于何种原因,在独立构建和发布每个模块时一切都很好。所以我就这样走了,因为父 pom 没有那么必要。我仍然想知道它是否可以修复,或者如果它不是用户错误,我会报告它的错误。 如果您仍然想尝试使用多模块,也许下次您应该使用完整的调试堆栈跟踪运行发布插件以更好地理解问题:mvn release:prepare ... -X > /Users/srowen/Documents/mavenlog.txt。 ScmTagPhase.java中详细介绍了plexus的getFiles方法使用的fileSet的内容。我暂时放弃了,我对这个问题没有任何认真的答案。 【参考方案1】:

原来在目录结构深处一个符号链接,它指向父目录。一旦删除,这个问题就消失了。我假设它在递归地标记目录时导致了一个无限循环,我可能已经预料到会被该工具检测和处理。

【讨论】:

以上是关于Maven 版本/scm 标签/Plexus DirectoryScanner 中的无限递归错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不创建 scm 标签的情况下进行 Maven 发布?

maven-release-plugin 标签创建

具有自己的 SCM 布局的 Maven 多模块 - 如何构建标签?

plexus 注释是不是在 Maven 插件中工作?

pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法

plexus ftpd 项目的最新版本