gpt4 book ai didi

svn - svn 客户端 'svnkit' 不可用

转载 作者:行者123 更新时间:2023-12-02 17:44:52 25 4
gpt4 key购买 nike

我一直在使用 svnant 1.3.0 从我的 SVN 存储库中的分支创建标签。现在我已经从 SVN 1.6 升级到 1.7,并且没有发布支持它的 svnant 二进制文件。但是我已经从 tigris.org 下载了 svnant 1.4 源代码并构建了一个 svnant.jar。

我知道 svnant 有一些依赖项,我有以下内容:svnkit 1.7.5(来自 svnant 存储库)、svnjavahl(来自 svnant 存储库)、svnClientAdapter(来自 svnant 存储库)、svnkit-cli(来自 svnant 存储库)、 trilead-ssh 1.0(来自 maven 存储库)和 ganymed-ssh.jar build 210(来自 maven 存储库)。

我使用 IVY 进行依赖管理,并将上述所有 jar(maven 存储库中的两个除外)添加到我的 Artifactory 安装中。在我的 IVY 依赖文件中,我像这样检索 jars:

<dependency org="svnant" name="svnant" rev="1.4.0" conf="test->default" />
<dependency org="svnkit" name="svnkit" rev="1.7.5" conf="test->default" />
<dependency org="svnjavahl" name="svnjavahl" rev="1.4.0" conf="test->default" />
<dependency org="svnClientAdapter" name="svnClientAdapter" rev="1.4.0" conf="test->default" />
<dependency org="svnkit-cli" name="svnkit-cli" rev="1.7.5"/>
<dependency org="trilead-ssh2" name="trilead-ssh2" rev="1.0.0" conf="test->default"/>
<dependency org="ch.ethz.ganymed" name="ganymed-ssh2" rev="build210" conf="test->default" />

所有 jar 都被正确检索。我尝试像这样进行 branch2tag 复制(retrieveIVY 目标检索上述 jar 文件):

<target name="create-tag" depends="retrieveIVY">
<taskdef classpathref="test.classpath.dep" resource="net/sf/antcontrib/antcontrib.properties" />
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="test.classpath.dep" />
<echo message="Creating tag ${env.tag_name}" />
<svnSetting username="${user}" password="${password}" client="svnkit" />
<svn>
<copy srcUrl="[srcUrl]" destUrl="[destUrl]" message="${env.tag_name}" />
</svn>
</target>

这适用于 svnant 1.3.0 和 SVN 1.6(除了 svnSetting 标签)。但是使用新的 jar 版本我得到以下错误:

The svn client 'svnkit' is not available !
at org.tigris.subversion.svnant.SvnClientType.checkAvailability(SvnClientType.java:122)
at org.tigris.subversion.svnant.SvnClientType.createClient(SvnClientType.java:93)
at org.tigris.subversion.svnant.SvnFacade.getClientAdapter(SvnFacade.java:362)
at org.tigris.subversion.svnant.SvnTask.executeImpl(SvnTask.java:597)
at org.tigris.subversion.svnant.SvnTask.execute(SvnTask.java:568)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
Caused by: org.tigris.subversion.svnclientadapter.SVNClientException: SVNKit client adapter is not available
at org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapterFactory.setup(SvnKitClientAdapterFactory.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.tigris.subversion.svnant.SvnClientType.invoke(SvnClientType.java:129)
at org.tigris.subversion.svnant.SvnClientType.checkAvailability(SvnClientType.java:112)
... 19 more

有人有办法解决这个问题吗?

最佳答案

我建议使用 svnkit直接使用 Java 类,而不是纠结于 svnant任务。这种方法与 macrodef 相结合,将产生类似但更可靠的解决方案。

<project name="build" default="checkout" xmlns:ivy="antlib:org.apache.ivy.ant">

<!--
======
Macros
======
-->
<macrodef name="svn-checkout">
<attribute name="src"/>
<attribute name="dest"/>
<sequential>
<mkdir dir="@{dest}"/>
<java classname="org.tmatesoft.svn.cli.SVN" dir="@{dest}" fork="true" classpathref="build.path">
<arg value="--non-interactive"/>
<arg line="--username ${svn.user}"/>
<arg line="--password ${svn.pass}"/>
<arg value="checkout"/>
<arg value="@{src}"/>
</java>
</sequential>
</macrodef>

<!--
=======
Targets
=======
-->
<target name="resolve" description="Resolve 3rd party dependencies">
<ivy:cachepath pathid="build.path">
<dependency org="org.tmatesoft.svnkit" name="svnkit-cli" rev="1.7.8" conf="default"/>
</ivy:cachepath>
</target>

<target name="checkout" depends="resolve" description="Pull code from SCM repository">
<svn-checkout src="http://svn.apache.org/repos/asf/subversion/trunk" dest="build/subversion"/>
</target>

<target name="clean" description="Cleanup build files">
<delete dir="build"/>
</target>

<target name="clean-all" depends="clean" description="Cleanup and purge ivy cache">
<ivy:cleancache/>
</target>

</project>

注意:

  • 这个例子使用了 ivy cachepath将依赖项下载到名为“build.path”的本地类路径引用中的任务。

关于svn - svn 客户端 'svnkit' 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com