2010-11-24 5 views
0

<ant>タスクを使用して別のantスクリプトを呼び出すantスクリプトを開発しています。このAntスクリプトは、Java製品のインストーラであり、お客様が別途Antをインストールするために使用されます。'-lib'オプションを指定してant 'ant'ターゲットを呼び出す方法はありますか

呼び出されるスクリプトはantlrタスク<antlr:ant-antlr3>を使用します。これを行うには、ant-antlr3.jarファイルをant libディレクトリに配置し、antlr-3.2.jarをクラスパスに追加する必要があります。

しかし、私はこのant-antl3.jarファイルをクライアントのインストール済みバージョンのantに持つことは望ましくありません。

<ant>タスク自体を使用してantlibに追加するjarファイルのパスを指定するために、antのコマンドライン '-lib'オプションと同等の機能を提供する方法はありますか?

私はオンラインのドキュメントを見てきましたが、方法がないようです。

おかげ

答えて

1

私はこれを行うには受け入れられた方法は、手動でビルドファイルにクラスパスを設定するのではなく、暗黙的にグローバルアリlibディレクトリを経由して、それを含めすることであると考えています。すなわち

<path id="master-classpath"> 
    <fileset dir="${lib}" /> 
    <fileset file="${findbugs-base}/lib/annotations.jar" /> 
    <pathelement location="${build-classes}" /> 
</path> 

あなたがそのようなjavac

<javac 
     destdir="${out}" 
     source="1.5" 
     target="1.5" 
     debug="true"> 
    <src path="${src}" /> 
    <classpath refid="master-classpath" /> 
</javac> 

としてクラスパス引数をこのように受け入れることができます任意のタスクでこのパス要素を使用することができ、セットアップグローバルアリが依存関係ではない、とのことができます。必要に応じて(特定の呼び出しまたはターゲットまで)ビルドに必要なファイルを指定します。

明らかに、これはすべて、クライアントのビルドファイルから呼び出すビルドファイルで実行されます。このようにして、あなたがあなたに呼び出すとき、クラスパスはあなたが望むように正確に設定されます。

もう少し慣れない可能性があるのは、文字通りExec Taskでシェルを外し、そのようにantを呼び出すことです。明らかに、Antタスクを提供することで、Antの開発者はあなたのことをお勧めしません。それにもかかわらず、オプションです。

+0

'' 要素は '' 要素によって支持されています。 refidsを使ってクラスパスを渡そうとしました。つまり、ビルドファイルにパスを設定し、これをrefidとして別のビルドファイルに渡しました。しかし、これはantlrタスクdefによって選ばれていません、私はtaskdefのために使用されるjarがant libに含まれなければならないと思います。 – Neil

+0

execタスクメソッドはこれのために動作します、ありがとう。 – Neil

1

Timの答えはほとんどの話ですが、Antを実行してJVMオプションを設定するには、javaタスクで呼び出す必要があります。

はAntのドキュメントにrunning this wayの一例であり、ここで若干-libを含むように修正:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${sub.builddir}" 
     timeout="4000000" 
     taskname="startAnt" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
    </classpath> 
    <arg value="-lib"/> 
    <arg value="${path.to.your.antlr.jar}"/> 
    <arg value="-buildfile"/> 
    <arg file="${sub.buildfile}"/> 
    <arg value="${sub.target}"/> 
</java> 
+0

上記のような動作をします。つまり、このようにカスタムライブラリをANTに渡しますが、それ以上のクラスパスエラーがあります。最も簡単な方法は、ANTのバージョンにカスタムlibsなどをクライアントにインストーラーと共に提供することであり、独自のものではなく実行することです。助けてくれてありがとう。 – Neil

関連する問題