如何使用 ANT 任务从 SVN 结帐?
Posted
技术标签:
【中文标题】如何使用 ANT 任务从 SVN 结帐?【英文标题】:How to checkout from SVN with an ANT task? 【发布时间】:2010-03-08 11:27:18 【问题描述】:我对任何方式感兴趣,我可以创建一个 Ant 任务来从 SubVersion 签出文件。我“只是”想从命令行进行结帐。我已经使用 Eclipse 和 Ant 和 SubVersion 有一段时间了,但是我的 Ant 和 SubVersion 知识有些欠缺,因为我依赖 Eclipse 将它们连接在一起。
我一直将 SvnAnt 视为一种解决方案,它是来自 Tigris http://subclipse.tigris.org/svnant/svn.html 的 Subclipse 的一部分。它可能工作正常,但我得到的只是 NoClassDefFoundErrors。对于更有经验的人来说,这可能看起来像是一个简单的 Ant 配置问题,但我不知道。我将 svnant.jar 和 svnclientadapter.jar 复制到了我的 Ant lib 目录中。然后我尝试运行以下命令:
<?xml version="1.0"?>
<project name="blah">
<property environment="env"/>
<path id="svnant.classpath">
<pathelement location="$env.ANT_HOME/lib"/>
<fileset dir="$env.ANT_HOME/lib/">
<include name="svnant.jar"/>
</fileset>
</path>
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />
<target name="checkout">
<svn username="abc" password="123">
<checkout url="svn://blah/blah/trunk" destPath="workingcopy"/>
</svn>
</target>
</project>
我得到以下回复:
build.xml:17: java.lang.NoClassDefFoundError: org/tigris/subversion/javahl/SVNClientInterface
我在 Windows XP 32 位上运行 SVN 1.7 和 SvnAnt 1.3。
感谢您的指点!
【问题讨论】:
***.com/questions/16305315/… 【参考方案1】:如果你没有让 SvnAnt 工作,你总是可以使用 exec:
<exec executable="/usr/local/bin/svn">
<arg value="co" />
<arg value="svn://repository/url" />
<arg value="/destination/directory" />
</exec>
【讨论】:
完美!谢谢!如果你能做到这一点,不确定 svnAnt 的意义何在? 理论上你要避免在 ant 任务中使用从该错误看来,您的类路径中可能还需要 JavaHL jar(JavaHL 是 Subversion API 的 Java 语言绑定)。你一个
此网址可能会有所帮助: http://subclipse.tigris.org/wiki/JavaHL
否则,您可以使用使用 Ant 来运行本机命令(但这当然会使其依赖于操作系统)。
【讨论】:
【参考方案3】:让我们看看这是否对你有帮助,我将 svnjavahl.jar、svnClientAdapter.jar 和 svnant.jar 复制到了我的 $ANT_HOME/lib 文件夹中。
然后在xml文件中:
<path id="svnant.classpath">
<fileset dir="$ABSOLUTE-PATH-TO-ANT-HOME/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />
然后,为了结帐..
<svn dateFormatter="yyyy-MM-dd HH:mm">
<checkout url="$MY-REPO-PATH"
destpath="$checkout.dir/MODULE-NAME"
....
</svn>
我认为您收到错误是因为您没有将 svnjavahl.jar
文件复制到 lib 文件夹中。这样做,它应该可以工作。
刚刚注意到一些东西,你只包括一个罐子,而不是像我一样的 **/*.jar
,因此它找不到你的 svnjavahl.jar.
【讨论】:
【参考方案4】:如果您试图让 Ant 使用命令行客户端,您可能必须执行以下操作:
<svn username="abc" password="123" javahl="false" svnkit="false">
【讨论】:
如果我没有设置 javahl 或 svnkit 属性,那么我会得到 NoClassDefFoundError。如果我将一个或两个设置为 true 或 false,那么我会得到“找不到 javahl、svnkit 和命令行 svn 客户端”。我已经尝试了所有组合,在类路径上有和没有 svnjavahl.jar。 如果您在 Ant 文件中执行以下操作,回显的 PATH 是否包含 SVN 二进制目录?ANT_HOME/lib(以及$user.home/.ant/lib
和其他一些地方)中的所有.jar 文件都是自动可用的,因此您的<typedef>
根本不需要类路径。
svnant 发行版尚未更新 1.7 版。您仍然可以使用 svnant.jar,但您需要从 svnant.1.3 替换这些 jar
svnClientAdapter.jar
svnjavahl.jar
带有更新版本。我从subclipse 1.8 发行版中提取了这些,甚至不必重命名它们:
org.tigris.subversion.clientadapter.javahl_1.7.2.jar
org.tigris.subversion.clientadapter_1.8.0.jar
【讨论】:
这确实帮助了我。如果您在 2012 年遇到此错误,那么这意味着您可能正在使用 svnant 发行版尚不支持的 subversion 1.7。所以只需从上面添加两个库,它应该可以工作。 2014 仍然不支持来自 SVNAnt 的高于 1.6 的任何内容。我猜他们自己也在使用 CLI。【参考方案6】:我的设置几乎相同,但问题相同。
我通过删除 2 个 svn*.jar 解决了这个问题
/usr/share/ant/lib
早些时候。 Ant 被多个罐子弄糊涂了。
【讨论】:
【参考方案7】:我发现此页面对实现这一目标非常有帮助。对于最新版本,我发现设置svn设置的批准方式如下:
<svnSetting svnkit="true" javahl="false" id="svn.settings" />
这意味着SVN命令本身应该是:
<svn refid="svn.settings">//Other commands</svn>
我实际上想要 svnkit 模式。 上面提到的库都可以,但是我还需要添加以下内容:
org.tmatesoft.sqljet_1.1.7.r1256_v20130327_2103.jar org.tmatesoft.svnkit_1.7.9.r9659_v20130411_2103.jar
org.tigris.subversion.clientadapter.svnkit_1.7.9.2.jar
这些都可以在提到的 subclipse 下载中找到。 tmatesoft 还需要:
antlr-3.5.2-complete.jar
可从此处获得: Antlr
【讨论】:
以上是关于如何使用 ANT 任务从 SVN 结帐?的主要内容,如果未能解决你的问题,请参考以下文章