SVNAnt - 使用SVNKit抛出NoSuchMethodError的propget任务

时间:2014-01-08 10:11:02

标签: svn ant svnant

我正在尝试使用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。(Lorg / tigris / subversion / javahl / SVNClientInterface; Ljava / lang / String; Ljava /郎/字符串; Ljava /郎/字符串; [B)V

我已经将file.xml的svn:keywords属性设置为“value”,因此确实存在,并将其提交。

如果我更改propget name参数以查找不存在的SVN属性(例如“testprop”),它不会失败它只返回“$ {prop.value}”,我假设因为支柱.value属性未设置。 如果我实际上将自定义的“testprop”SVN属性添加到file.xml,我再次得到上述错误 - 所以只有当它找到一个属性并尝试获取它的值时才会发生。

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

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

SVNKit的JavaHL绑定位于名为svnkit-javahl16-*VERSION*.jar的文件中。此文件位于从SVNKit网站下载的lib的{​​{1}}目录下。

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

修改 - 2014年1月10日的跟进:

“缺失”方法肯定在svnkit-javahl16-1.7.11.jar中:

standalone.zip

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

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

> 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
...

将产生雪崩的输出。在这将被埋没如下的一行:

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

告诉我们您的系统[Loaded org.tigris.subversion.javahl.PropertyData from file:/...] 是什么。如果没有完全匹配,那么看看是否有对名称中带有“javahl”的已加载类的引用。