2

注意してください-ここで「裏話を削除する」必要がある、またはこの質問は「CodeProとは何の関係もない」と主張する人には、CodeProにはAntタスクを起動する方法に関するドキュメントがほとんどないことを言及したいと思います-コマンドラインから適切に実行されます。CodePro はほぼ 100% UI 駆動型であり、そのドキュメントはそれに重点を置いています。この質問に完全に答えることができれば、コマンドラインから CodePro タスクを実行したい私のような他の開発者にとって、数少ない (唯一ではないにしても) 完全なドキュメントの 1 つとして役立つと思います。建てる。

コマンドラインからCodePro AnalyTix の Ant タスクを動作させようとしています。

ドキュメントを読み、いくつかの例をダウンロードした後、Ant で外部定義されたタスクを実行する通常の方法でタスクを実行する必要はありません。通常は次のようになります。

  1. サードパーティの Ant jarxmlnsのルート要素内に属性を定義します<project>
  2. <taskdef>宣言を使用して 1 つ以上のタスクを定義する
  3. <target>これらの定義されたタスクを要素内から呼び出す

CodePro では、Ant タスクは多くのコア Eclipse jar/クラスに依存しています。それらのサンプルのいずれかをダウンロードすると、Ant タスクを実行する方法を示す Windows BATCH ファイルが記述されていることがわかります。これらはすべて次の形式をとっています。

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 ファイルです。

私は午前中ずっと、これらの CodePro タスクを「通常の」方法で実行するために必要な依存関係を Ant lib ディレクトリに提供しようとしましたが、Eclipseplugins/ディレクトリ全体をANT_HOME/lib! 私はこれらの変更を元に戻し、コマンドラインから Ant を実行するこの (やや醜い) 方法を受け入れる準備ができました。

上記の例を借りて、これが私の新しいセットアップです。

  • build.xmlは私の「コア」Ant ビルドファイルであり、名前の付いたターゲットを持つ場所ですrun-codepro-analysis
  • codepro-analysis.xmlすべての CodePro タスクが定義される場所です (ラッパー ターゲット内)。headless.xmlこれは、上記の BATCH ファイルと同等です
  • 上記の BATCH ファイルで提供されているものとまったく同じ引数buildfile.xml#run-codepro-analysisを呼び出して実行したいのですが、次の例外があります<java>
    • 偶然にも、私のマシンにはすでに 3 つの環境変数がセットアップされていJAVA_HOMEます。の代わりにこれらを使用したいのは明らかです。ECLIPSE_HOMEWORKSPACE_HOMEJAVAEXEECLIPSEHOMEWORKSPACE
    • 実行元と同じコンソール/端末に出力をリダイレクトしたいant -buildfile build.xml run-codepro-analysisnot 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 開発者向けに、これをビルドの一部として機能させる方法を説明する包括的なドキュメントは Web 上に他にありません (とにかく見つけることができます)。

4

1 に答える 1

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>
于 2012-10-10T20:34:37.363 に答える