Ant 任务,错误

Ant tasks, errors

我们在这里使用 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

任何帮助都将非常有用,谢谢。

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

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

project 元素中,您可以声明目标、任务定义等

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

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

  • 您没有定义以下目标。

    • 获取密码
    • 获取标签
    • 获取安装目录
    • 获取服务器名称

    您正在结帐 目标 取决于正在定义的这些其他目标,而您没有定义它们。

  • 您的 <qvcs/> 目标具有文字字符串,这可能是用户应该自行设置的内容。我很确定 Your QVCS-Enterprise Username 在您的系统中不是有效的用户名。这些必须转化为属性,并让用户可以通过某种方式设置它们——通过属性文件或要求输入。
  • 将 checkout/checkin 信息放入构建文件(Ant 就是这样)中存在先有鸡还是先有蛋的困境。当您进行结帐时,如果构建脚本发生变化会怎样?结帐如何处理?

您是否正在使用 Ant 进行构建,并且只想添加签入和签出功能?或者您是否正在使用 Ant 来实现签入和签出的自动化?

Ant 不是一种编程脚本语言。它是一种构建依赖矩阵语言。它试图找出构建所需的内容以及构建顺序。您不会为 Ant 提供构建的分步指导。您告诉 Ant 运行 的目标是什么,以及该目标依赖于什么。 Ant 将构建一个依赖矩阵,然后找出先行和后行的内容。控制操作顺序可能非常困难。

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

顺便说一下,qvcs support 的情况看起来不太好,您可能需要转向支持更广泛的工具。越快越好

我刚刚浏览了 QVCS 站点,现在发现没有命令行客户端!

Since a Java-based command line tool could be very slow because it would require the loading of the JVM for each separate version control operation, we have chosen to supply command line like behavior for the QVCS-Enterprise product via a custom ant task.

是的,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 也没有更好的建议:

The simplest approach is to check in all your version controlled files into the new tool, and use QVCS for old history. All other approaches are a lot more work, and may not produce results reliable enough to be useful.

总有一天,您的 qvcs 存储库会消亡。也许 Windows 的新版本会在 qvcs 不起作用的地方出现。也许服务器软件会宕机,您无法重新启动并运行。再不动,就一无所有

你最好的办法是使用你的资源搬出 QVCS。