Ant任务,错误

时间:2015-02-12 15:57:52

标签: ant

我们在这里使用QVCS。我试图自动执行签入和签出任务。参考QVCS网站:http://qvcs.cbmc.co.uk:9080/docs/qvcsanttask.html

我有以下脚本:

<taskdef name="qvcs"
        classpath="${classpath};${basedir}/ant.jar;${basedir}/gui_out.jar"
        classname="com.qumasoft.qvcslib.QVCSAntTask"/>
<!-- =================================================================== -->
  <!-- Get by label for all project files                                  -->
  <!-- =================================================================== -->
  <target name="GetByLabel"
          depends="getPassword,getLabel,getInstallDir,getServerName"
          description="Get by label from the Production Server.">
      <qvcs userDirectory="${qvcs.installDir}"
            serverName="${qvcs.serverName}"
            userName="Your QVCS-Enterprise Username"
            password="${qvcs.password}"
            projectName="name of the project you want to work on"
            viewName="name of the view you want to work on"
            appendedPath=""
            operation="get"
            workfileLocation="the local workfile directory where results will go."
            overWriteFlag="true"
            label="${qvcs.label}">
      </qvcs>

  </target>

我对ANT不太熟悉。我把这个文件放在ANT目录中,把gui_out.jar放在同一个地方。但我得到这个错误: 建立失败

\apache-ant-1.9.4\bin\build.xml:3: Unexpected element "{}taskdef" {antlib:org.apache.tools.ant}taskdef

对此有任何帮助都很棒,谢谢。

3 个答案:

答案 0 :(得分:1)

Ant构建文件应以project元素开头:

<project default="default_target" name="Example project">
    ...
</project>

project元素中,您将声明目标,taskdef等

请参阅http://ant.apache.org/manual/using.html#buildfile

答案 1 :(得分:1)

我不会使用Ant自动结帐和签到。然后,您必须确保每个人都安装了Ant,具有gui_out.jar以及他们需要的任何其他内容。如前所述,您的脚本顶部和底部需要<project></project>,但您的脚本仍有问题:

  • 您没有定义以下目标。

    • getPassword来
    • getLabel
    • getInstallDir
    • getServerName

    您的结帐目标取决于定义的其他目标,并且您没有定义它们。

  • 您的<qvcs/>目标有文字字符串,可能是用户应自行设置的字符串。我很确定Your QVCS-Enterprise Username不是系统中的有效用户名。这些必须转换为属性,并为用户设置它们 - 通过属性文件或请求输入。
  • 将结帐/签入信息放入构建文件(这就是Ant)中存在鸡和蛋的困境。当您结帐时,如果构建脚本发生更改会发生什么?结帐如何处理?

您是否在构建中使用Ant,并且只想添加签入和签出功能?或者您是否使用Ant进行自动检入和检出?

Ant不是一种编程脚本语言。它是一种构建依赖矩阵语言。它试图弄清楚它需要做什么以及以什么顺序进行构建。您没有给Ant执行构建的分步指导。你告诉Ant要运行什么目标,以及目标所依赖的目标。 Ant将构建一个依赖矩阵,然后找出首先是什么,接下来会发生什么。控制操作顺序可能非常困难。

如果要自动化,请使用编程工具。在PC上,使用批处理脚本或更好的PowerShell。在Unix上,使用Shell脚本或Perl或Python。更好的是,确保您的开发人员使用IDE进行开发,并让IDE负责您的qvcs检查和检查。很难说出你可以使用哪种IDE。这取决于您的编程环境。

顺便说一下,qvcs support的内容看起来不太好,您可能希望转向更广泛支持的工具。越快越好。

答案 2 :(得分:0)

我刚刚通过QVCS网站,现在意识到没有命令行客户端!

  

由于基于Java的命令行工具可能非常慢,因为它需要为每个单独的版本控制操作加载JVM,因此我们选择通过自定义蚂蚁为QVCS-Enterprise产品提供类似行为的命令行任务。

是的,Ant会更快 - 除了Ant也必须为每个版本控制操作加载JVM!

这将非常复杂......

  • 用户必须可以访问build.xml才能使用它。看起来您必须锁定个别文件进行编辑,这意味着您可能不会进入包含build.xml的目录。
  • 您需要一种设置参数的方法。坐在那里并询问每个命令的所有参数只需要做太多工作。

每个命令看起来都像这样:

$ ant -f %BUILD_DIR%/build.xml -Duser=david -Dpassword=swordfish -Dview=default -DWorkfilelocation=... lock

您需要-f参数指向build.xml文件的位置。您需要各种-D参数来填写每次必须提供给命令行客户端的所有信息。

我想这个命令行客户端最终可能包含几个部分:

  • 您要执行的每个命令的批处理脚本。
  • 批处理脚本将在已知位置执行的build.xml文件。
  • 一种设置参数的方法。
  • 存储有关工作副本状态的基本信息的机制:视图的名称是什么?用户做了什么结账?用户的密码是什么?等等,可能在像SVN(.svn)或Git(.git)这样的目录中,所以你可以有多个结账。

有可能吗?大概。这值得么?可能不是。最后,您可能最好使用批处理脚本在纯Java中编写它来调用Java程序。同样,gitsvn执行此类操作的方式:

C:> qvcs checkout -user david -password swordfish view ...

您需要安装一件事。

我强烈建议放弃qvcs。时钟在流逝。 Jim Vorbis宣布放弃qvsc。该网站现在是一些健康补品销售网站。 Vorbis先生尚未发布源代码,也没有提供服务器。

我会从qvcs中分类您需要的信息。也许获取最后这么多次迭代,然后将它们检查到Git或Subversion中。然后,从qvcs中严格使用您可以从新系统获得的历史记录。甚至Jim Vorbis也没有更好的建议:

  

最简单的方法是将所有版本控制的文件签入新工具,并将QVCS用于旧历史记录。所有其他方法都需要做更多的工作,并且可能无法产生足够可靠的结果以使其有用。

有一天,您的qvcs存储库将会死亡。也许新版本的Windows将出现在qvcs不起作用的地方。也许服务器软件会崩溃,你再也无法启动它。如果你不动,你就会失去一切。

您最好的选择是使用您的资源退出QVCS。