2012-10-10 142 views
2

请注意 - 任何人认为我应该在这里“删除背景故事”,或者说这个问题“与CodePro无关”,我想提到CodePro几乎没有关于如何从命令行正确启动Ant任务的文档。 CodePro几乎100%由用户界面驱动,他们的文档重点关注。如果这个问题能够得到完全解答,我相信它将成为像我这样的其他开发者的少数(如果不是唯一的)完整文档之一,他们只是想从命令行运行CodePro任务,作为他们的一部分建立。在Ant任务中运行“无头Eclipse”

我试图从命令行得到CodePro AnalyTix's Ant tasks

阅读文档,并下载了一些例子之后,它不会让你运行的任务,就像你在运行Ant的,通常看起来外部定义任务的正常方式:

  1. 定义一个xmlns属性根<project>元素第三方蚂蚁罐内
  2. 定义与<taskdef>声明1+任务
  3. 调用来自<target>元素中所定义的那些任务

使用CodePro,Ant任务依赖于许多核心Eclipse Jar /类。如果你下载任何他们examples的,你会看到,展示他们是如何想你运行的Ant任务写入Windows批处理文件,他们都采取以下形式:

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是Ant文件它具有CodePro Ant目标和任务。

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

从上面的例子中借用,这里是我的新格局:

  • build.xml是我的“芯” Ant构建,并在那里我将有一个名为目标run-codepro-analysis
  • codepro-analysis.xml是所有我的CodePro任务将被定义(在包装目标中);这相当于headless.xml以上
  • 批处理文件我想buildfile.xml#run-codepro-analysis打电话<java>和运行完全相同的参数在上面的批处理文件提供,但下列情况除外
    • 巧合的是,我已经有三个env vars在我的机器上安装:JAVA_HOME(指向我的JDK),ECLIPSE_HOMEWORKSPACE_HOME;我显然想用这些来代替JAVAEXE,ECLIPSEHOMEWORKSPACE
    • 我希望将输出重定向到相同的控制台/终端,因为我正在运行ant -buildfile build.xml run-codepro-analysis; headless_out.txt或其他一些文件

看到,这是一个相当复杂的命令(有许多选项,参数,甚至嵌套的参数选项),我真的不知道如何构建在run-codepro-analysis目标内<java>元素,但这里是我到目前为止有:

<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]无法访问jar文件/home/myuser/sandbox/workbench/eclipse/indigo-3.7/eclipse/plugins/org.eclipse.equinox.launcher_*.jar

我不知道如果这是因为通配符失败,并且它实际上正在查找org.eclipse.equinox.launcher_*.jar,或者我的<java>任务中的其他内容配置不正确。在此先感谢任何能够帮助我实现这一目标的人。就像我说的那样,在网络上没有其他全面的文档(无论如何我都能找到),这些文档解释了如何在构建过程中实现这一目标,特别是对于无法运行BATCH文件的Linux开发人员。

+0

忘了提 - 这是一个非常* *类似的问题[本](http://stackoverflow.com/questions/5632930/how-to-execute-google-codepro-analytix然而,在这个问题中,用户正试图直接从BATCH文件运行'headless.xml'。在这里,我试图从另一个构建文件运行(相当于)'headless.xml',以便访问由'AntClassLoader'提供的Eclipse/Equinox类路径。 – IAmYourFaja

回答

1

几乎在那里。

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>