1

我正在尝试使用 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/lang/String; Ljava/lang/String;[B)V

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

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

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

任何帮助表示赞赏,谢谢。

4

1 回答 1

1

SVNKit 的 JavaHL 绑定在一个名为svnkit-javahl16-*VERSION*.jar. 这个文件可以在从 SVNKit 网站下载的lib目录下找到。standalone.zip

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

编辑 - 2014 年 1 月 10 日的后续行动:

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

> 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”的加载类的引用。

于 2014-01-09T15:22:27.917 回答