SVNAnt-propget任务使用SVNKit抛出NoSuchMethodError



我试图使用svnant的propget任务查询SVN属性值,但遇到了问题。

我已经编写了一个简单的Ant目标来更新构建文件的文件夹,然后查询一个属性:

<project name="svntest" default="test">
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" />
<svnSetting javahl="false" svnkit="true" username="xxx" password="yyy" id="svn.settings" />
<target name="test">
<svn refid="svn.settings">
<update dir="." />
<propget path="file.xml" name="svn:keywords" property="prop.value" />
</svn>
<echo message="${prop.value}" />
</target>
</project>

我的SVN回购是在1.7.5,我有svnkit 1.7,它应该是兼容的。

如果我注释掉propget和echo行,它会很好地更新文件夹。但是,当我尝试查询特定文件的svn:keywords属性时,我会得到以下错误:

C:\somepath\test.xml:11:java.lang.NoSuchMethodError:org.tigris.subversion.javahl.PropertyData

我已经将file.xml的svn:keywords属性设置为"value",所以它确实存在,并提交了它。

如果我更改propget-name参数以查找不存在的SVN属性(例如"testprop"),它不会失败,只是返回"${prop.value}",我认为这是因为没有设置prop.value属性。如果我真的把自定义的"testprop"SVN属性添加到file.xml中,我会再次得到上面的错误——所以它似乎只有在找到一个属性并试图获得它的值时才会发生。

我以前在尝试使用javahl时遇到过问题,因此将其设置为false并使用svnkit。然而,由于更新任务有效,我不会认为javahl/svnkit绑定是问题所在。

感谢任何帮助,谢谢。

SVNKit的JavaHL绑定位于名为svnkit-javahl16-*VERSION*.jar的文件中。该文件可以在从SVNKit网站下载的standalone.ziplib目录下找到。

这个Jar文件需要位于Ant类路径上。

编辑-2014年1月10日跟进:

"失踪"的方法肯定在svnkit-javahl16-1.7.11jar:

> javap -s -classpath svnkit-javahl16-1.7.11.jar org.tigris.subversion.javahl.PropertyData
...
org.tigris.subversion.javahl.PropertyData(org.tigris.subversion.javahl.SVNClientInterface, java.lang.String, java.lang.String, java.lang.String, byte[]);
Signature: (Lorg/tigris/subversion/javahl/SVNClientInterface;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[B)V
...

不知怎么的,这个构造函数在Ant的类路径中找不到。

在命令提示符中运行以下命令:

> set ANT_OPTS=-verbose:class
> ant <= your Ant command line here

将会产生雪崩式的输出。在这将埋一条线如下:

[Loaded org.tigris.subversion.javahl.PropertyData from file:/...]

让我们知道您系统中的file:/...是什么。如果没有完全匹配,那么查看是否有对名称中带有"javahl"的已加载类的引用。

相关内容

  • 没有找到相关文章

最新更新