2012-10-10 140 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>