请注意- 对于任何认为我应该在这里“删除背景故事”或这个问题“与 CodePro 无关”的人,我想提一下 CodePro 关于如何完成他们的 Ant 任务的文档很少 -并从命令行正确运行。CodePro 几乎 100% 由 UI 驱动,他们的文档重点关注这一点。如果可以完全回答这个问题,我相信它将成为像我这样只想从命令行运行 CodePro 任务的其他开发人员的少数(如果不是唯一)完整文档之一,作为他们的一部分建造。
我试图让CodePro AnalyTix 的 Ant 任务从命令行工作。
阅读文档并下载一些示例后,它不希望您以在 Ant 中运行外部定义任务的正常方式运行任务,通常如下所示:
- 在第 3 方 Ant jar
xmlns
的根元素内定义一个属性<project>
<taskdef>
用声明定义 1+ 个任务<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_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 开发人员。