2

请注意- 对于任何认为我应该在这里“删除背景故事”或这个问题“与 CodePro 无关”的人,我想提一下 CodePro 关于如何完成他们的 Ant 任务的文档很少 -并从命令行正确运行。CodePro 几乎 100% 由 UI 驱动,他们的文档重点关注这一点。如果可以完全回答这个问题,我相信它将成为像我这样只想从命令行运行 CodePro 任务的其他开发人员的少数(如果不是唯一)完整文档之一,作为他们的一部分建造。

我试图让CodePro AnalyTix 的 Ant 任务从命令行工作。

阅读文档并下载一些示例后,它不希望您以在 Ant 中运行外部定义任务的正常方式运行任务,通常如下所示:

  1. 在第 3 方 Ant jarxmlns的根元素内定义一个属性<project>
  2. <taskdef>用声明定义 1+ 个任务
  3. <target>从元素内部调用那些定义的任务

使用 CodePro,Ant 任务依赖于许多核心 Eclipse jar/类。如果您下载他们的任何示例,您将看到编写的 Windows BATCH 文件,这些文件演示了他们希望您如何运行他们的 Ant 任务,并且它们都采用以下形式:

set JAVAEXE="\Programs\jdk1.5.0_05\jre\bin\java.exe"
set ECLIPSEHOME="\Programs\eclipse_330"
set WORKSPACE="\Programs\eclipse_330_headless\headless_arbitrary_src_multi_audit\workspace"
for /f "delims= tokens=1" %%c in ('dir /B /S /OD %ECLIPSEHOME%\plugins\org.eclipse.equinox.launcher_*.jar') do set EQUINOXJAR=%%c

:run
@echo on
%JAVAEXE% -jar %EQUINOXJAR% -clean -noupdate -application org.eclipse.ant.core.antRunner -data %WORKSPACE% -verbose -file headless.xml %* >headless_out.txt 2>&1

headless.xml是具有 CodePro Ant 目标和任务的 Ant 文件。

我整个上午都在尝试为我的 Ant lib 目录提供以“正常”方式运行这些 CodePro 任务所需的必要依赖项,但发现自己开始将整个 Eclipseplugins/目录复制到ANT_HOME/lib! 我已经恢复了这些更改,现在准备接受这种(相当丑陋的)从命令行运行 Ant 的方式。

借鉴上面的示例,这是我的新设置:

  • build.xml是我的“核心”Ant 构建文件,并且是我将有一个名为的目标的地方run-codepro-analysis
  • codepro-analysis.xml是定义我的所有 CodePro 任务的地方(在包装器目标内部);这相当于headless.xml上面的 BATCH 文件
  • 我想buildfile.xml#run-codepro-analysis调用<java>和运行与上面 BATCH 文件中提供的完全相同的参数,但有以下例外
    • 巧合的是,我的机器上已经设置了三个环境变量:(JAVA_HOME指向我的 JDK)ECLIPSE_HOMEWORKSPACE_HOME;我显然想用这些来代替JAVAEXE,ECLIPSEHOMEWORKSPACE
    • 我希望将输出重定向到与我运行时相同的控制台/终端ant -buildfile build.xml run-codepro-analysis不是 headless_out.txt或其他一些文件

看到这是一个非常复杂的命令(有许多选项、参数,甚至选项的嵌套参数),我不太确定如何<java>在目标内构造元素run-codepro-analysis,但这是我目前所拥有的:

<target name="run-codepro-analysis">
    <java fork="true" failonerror="true"
        jar="${env.ECLIPSE_HOME}/plugins/org.eclipse.equinox.launcher_*.jar">
        <arg line="-clean -noupdate -application org.eclipse.ant.core.antRunner -data ${env.WORKSPACE_HOME} -verbose -file codepro-analysis.xml"/>
</target>

当我运行它时,构建失败:

[java] 无法访问 jarfile /home/myuser/sandbox/workbench/eclipse/indigo-3.7/eclipse/plugins/org.eclipse.equinox.launcher_*.jar

我不确定这是否是因为通配符失败并且它实际上正在寻找org.eclipse.equinox.launcher_*.jar,或者我的<java>任务中的其他内容配置不正确。提前感谢任何可以帮助我完成这项工作的人。就像我说的那样,网络上没有其他全面的文档(无论如何我都可以找到)解释如何使它作为构建的一部分工作,特别是对于无法运行 BATCH 文件的 Linux 开发人员。

4

1 回答 1

1

差不多好了。

jar参数不能有通配符,但这可以很容易地修复,使用classnameandclasspath代替(可以fileset与通配符一起使用)。

我还建议使用单参数形式将命令行参数传递给 java 任务。以后的惊喜少了

<target name="run-codepro-analysis">
  <java fork="true" failonerror="true"
    classname="org.eclipse.equinox.launcher.Main"
  >
    <arg value="-clean"/>
    <arg value="-noupdate"/>
    <arg value="-application"/>
    <arg value="org.eclipse.ant.core.antRunner"/>
    <arg value="-data"/>
    <arg file="${env.WORKSPACE_HOME}"/>
    <arg value="-verbose"/>
    <arg value="-file"/>
    <arg file="codepro-analysis.xml"/>

    <classpath>
      <fileset dir="${env.ECLIPSE_HOME}/plugins">
        <include name="org.eclipse.equinox.launcher_*.jar"/>
      </fileset>
    </classpath>
  </java>
</target>
于 2012-10-10T20:34:37.363 回答