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

我正在尝试从命令行运行CodePro AnalyTix's Ant tasks

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


在第3方蚂蚁罐的根xmlns元素内定义一个<project>属性
使用<taskdef>声明定义1个以上任务
<target>元素内部调用那些定义的任务


使用CodePro,Ant任务取决于许多核心Eclipse jar /类。如果下载他们的任何examples,您将看到编写的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任务,但是发现自己开始将整个Eclipse plugins/目录复制到ANT_HOME/lib中!我已经撤消了这些更改,现在准备接受从命令行运行Ant的这种(相当难看的)方式。

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


build.xml是我的“核心” Ant构建文件,在这里我将有一个名为run-codepro-analysis的目标
codepro-analysis.xml是定义我所有CodePro任务的位置(在包装目标中);这等效于上面的BATCH文件中的headless.xml
我希望buildfile.xml#run-codepro-analysis调用<java>并运行与上面BATCH文件中提供的参数完全相同的参数,但以下情况除外:

巧合的是,我已经在机器上设置了三个环境变量:JAVA_HOME(指向我的JDK),ECLIPSE_HOMEWORKSPACE_HOME;我显然想用它们代替JAVAEXEECLIPSEHOMEWORKSPACE
我希望将输出重定向到与运行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开发人员而言。

最佳答案

差不多好了。

jar参数不能有通配符,但是可以很容易地解决,可以使用classnameclasspath代替(可以将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>

10-02 22:13