1

ファイル/フォルダーを指定したディレクトリにコピーする単純な ANT スクリプトを作成しようとしています。たとえば、次のように実行します。

ant deploy src/classes/myClass.class

ファイル「myClass.class」が「src/classes/」から「deploy/src/classes/」にコピーされます。また、これは指定されたフォルダーに対して機能するはずなので、次を実行します。

ant deploy src/classes/

すべてのファイルを src/classes" から "deploy/src/classes" にコピーする必要があります。また、スクリプトが実行される前に宛先フォルダーが存在しないため、最初に "touching" する必要があります...

ファイルをコピーすることは実際には問題ではありませんが、これをパラメータで動作させる方法がわかりません(上記のように)...

これをアクティブにする方法を知っている人はいますか?

4

4 に答える 4

1

Antはコンピューター言語ではありません。これはマトリックス依存言語です。

違いは微妙です。プログラミング言語ははるかに柔軟性がありますが、実行するすべてのステップを指示する必要があります。マトリックス依存言語は、実行の順序を理解します。

微妙ですが、重要な違いです。標準のAntでは、whileループ、forループ、if/thenステートメントなどの基本的な制御構造が欠落しています。

あなたがやりたいことは、標準的なコンピュータ言語ではるかに簡単になるように思えます。たぶんPython、Perl、あるいはシェルスクリプトですら。

コマンドラインで「ant-help」と入力すると、通常のプログラミング言語のようにパラメータをAntに渡す実際の方法がないことがわかります。代わりに、Antが使用できるコマンドラインでプロパティを設定できます。

$ant -Ddeploy.classfile=src/classes/myClass.class deploy

-Dを使用すると、デプロイタスクを呼び出すときにプロパティを設定できます。次に、deploy.classfileプロパティを使用して、Antで使用できます。あなたのタスク目標。このような単純なbuild.xmlファイルでも約20〜30行が必要になると概算します。これは、クラスファイルまたはディレクトリを提供する場合に特に当てはまり、2番目のターゲットを必要とする別の方法でそれらを処理する必要があります。それだけでなく、ワークフローを理解するのは難しいでしょう。

ここにアイデアがあります。そもそも、タスクでdestdirターゲットを使用して、ディレクトリに必要なファイルを作成してみませんか。Antの主な方法の1つは、作成したファイルをリポジトリ内のファイルから分離することです。クリーンアップがはるかに簡単になります。さらに、タスクは、変更されていないソースファイルのクラスファイルを再構築しないことを認識しています。<javac>*.classdeploy<javac>

<target name="compile"
    description="Compile your source files">

    <property name="main.destdir" value="${basedir}/deploy/classes"/>
    <property name="main.srcdir" value="${basedir}/src"/>

    <path id="main.classpath">
        <fileset dir="${basedir}/lib/>
    </path>

    <javac srcdir="${main.srcdir}"
        destdir="${main.destdir}"
        classpathref="main.classpath"/>
</target>

これで、ソースディレクトリからデプロイディレクトリにファイルをコピーする必要がなくなりました。さらに良いことに、<javac>変更されていないソースファイルを再コンパイルしません。Antに設計された仕事をさせ、他のすべてのことには、優れたスクリプト言語を使用してください。

于 2012-08-17T16:46:00.240 に答える
1

入力コマンド ライン文字列の変更に問題がない場合は、次の方法でうまくいくはずです。

<?xml version="1.0" encoding="UTF-8" ?>
<project name="Deploy" default="copy">

    <!--
        This script is called in the following manner:

        ant deploy -Dsource.dir=src/classes     (to copy the entire directory)
        ant deploy -Dsource.dir=src/classes -Dsource.module=myClass.class
                                                (to copy one class)

    -->

    <!-- <property name="source.dir" value="src/com/ggl/unzip" />  -->
    <!-- <property name="source.module" value="myClass.class" />  -->

    <target name="copy">
        <condition property="source.module.text" value="all files">
            <not>
                <isset property="source.module" />
            </not>
        </condition>

        <condition property="source.module" value="**.*">
            <not>
                <isset property="source.module" />
            </not>
        </condition>

        <property name="source.module.text" value="${source.module}" />

        <echo>Copying ${source.module.text} from ${source.dir} to deploy/${source.dir}</echo>

        <copy todir="deploy/${source.dir}" overwrite="true" verbose="true">
            <fileset dir="${source.dir}">
                <include name="${source.module}" />
            </fileset>
        </copy>
    </target>

</project>
于 2012-08-17T16:59:48.023 に答える
0

コンソールから ant に値を提供するには、ant-properties を使用する必要があります-D。プレフィックスを付けて渡すことができるため、ビルドを次のように呼び出す必要があります: ant -Ddst=deploy -Dsrc=src/classes/ (また、src とdst 位置 - コマンドのように) build.xml では、このプロパティにおよびcpとしてアクセスできます。${dst}${src}

私はそれがあなたに合っていないので、ant用の新しいantエントリポイントクラスを作成して呼び出す必要があります

ant -main <YourClass> arg2 arg3

例はこちら(最初の例)

于 2012-08-17T15:33:29.303 に答える
0

cpAnt スクリプトではなく、古き良きシェル スクリプトを使用してみませんか? cp -rディレクトリを再帰的にコピーできます...

于 2012-08-17T14:12:46.517 に答える