请注意-对于任何认为我应该在这里“删除背景故事”的人,或者这个问题“与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_HOME
和WORKSPACE_HOME
;我显然想用它们代替JAVAEXE
,ECLIPSEHOME
和WORKSPACE
我希望将输出重定向到与运行
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
参数不能有通配符,但是可以很容易地解决,可以使用classname
和classpath
代替(可以将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>