web-dev-qa-db-ja.com

コマンドラインでAntビルドを実行する方法

Antビルドファイルがあり、次のコマンドを使用してコマンドラインで実行しようとしています。

$ C:\Program Files (x86)\.....>ant -f C:\Silk4J\Automation\iControlSilk4J\build.xml

しかし、何も起こらず、結果は次のとおりです。

BUILD SUCCESSFUL
Total time: 0 seconds

私の環境変数は正しいです。
何が問題ですか?これが私のビルドファイルです。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
              Any modifications will be overwritten.
              To include a user specific buildfile here, simply create one in the same
              directory with the processing instruction <?eclipse.ant.import?>
              as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="iControlSilk4J">
    <property environment="env"/>
    <property name="Eclipse_HOME" value="../../../Program Files (x86)/Silk/SilkTest/Eclipse"/>
    <property name="junit.output.dir" value="junit"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.6"/>
    <property name="source" value="1.6"/>
    <path id="Silk Test JTF 13.5.0 Library.libraryclasspath">
        <pathelement location="../../../Program Files (x86)/Silk/SilkTest/ng/JTF/silktest-jtf-nodeps.jar"/>
    </path>
    <path id="JUnit 4.libraryclasspath">
        <pathelement location="${Eclipse_HOME}/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar"/>
        <pathelement location="${Eclipse_HOME}/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar"/>
    </path>
    <path id="iControlSilk4J.classpath">
        <pathelement location="bin"/>
        <pathelement location="lib/Apache-log4j.jar"/>
        <pathelement location="lib/commons-io-2.4.jar"/>
        <pathelement location="lib/commons-lang3-3.1.jar"/>
        <pathelement location="lib/junit.jar"/>
        <pathelement location="lib/org.hamcrest.core_1.1.0.v20090501071000.jar"/>
        <pathelement location="lib/silktest-jtf-nodeps.jar"/>
        <path refid="Silk Test JTF 13.5.0 Library.libraryclasspath"/>
        <path refid="JUnit 4.libraryclasspath"/>
        <pathelement location="../../../Users/Admin/Desktop/Java-mail-1.4.4.jar"/>
        <pathelement location="../../../Users/Admin/Desktop/javax.activation.jar"/>
        <pathelement location="lib/joda-time-2.3.jar"/>
    </path>
    <target name="init">
        <mkdir dir="bin"/>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src">
                <exclude name="**/*.Java"/>
            </fileset>
        </copy>
    </target>
    <target name="clean">
        <delete dir="bin"/>
    </target>
    <target depends="clean" name="cleanall"/>
    <target depends="build-subprojects,build-project" name="build"/>
    <target name="build-subprojects"/>
    <target depends="init" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
            <src path="src"/>
            <classpath refid="iControlSilk4J.classpath"/>
        </javac>
    </target>
    <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
    <target description="copy Eclipse compiler jars to ant lib directory" name="init-Eclipse-compiler">
        <copy todir="${ant.library.dir}">
            <fileset dir="${Eclipse_HOME}/plugins" includes="org.Eclipse.jdt.core_*.jar"/>
        </copy>
        <unzip dest="${ant.library.dir}">
            <patternset includes="jdtCompilerAdapter.jar"/>
            <fileset dir="${Eclipse_HOME}/plugins" includes="org.Eclipse.jdt.core_*.jar"/>
        </unzip>
    </target>
    <target description="compile project with Eclipse compiler" name="build-Eclipse-compiler">
        <property name="build.compiler" value="org.Eclipse.jdt.core.JDTCompilerAdapter"/>
        <antcall target="build"/>

...
14
Guylene Emond

Ant Webサイトにアクセスし、 ダウンロード を入力します。これにより、EclipseのAntoutsideのコピーが作成されます。 C:\antディレクトリの下に置くことをお勧めします。この方法では、ディレクトリ名にスペースが含まれません。システムコントロールパネルで、環境変数ANT_HOMEをこのディレクトリに設定し、システムPATHvariable、%ANT_HOME%\binの前に追加します。この方法では、ディレクトリ名全体を入力する必要はありません。

上記を実行したと仮定して、これを試してください:

C:\> cd \Silk4J\Automation\iControlSilk4J
C:\Silk4J\Automation\iControlSilk4J> ant -d build

これにより、いくつかのことが行われます。

  • EclipeのバージョンのAntに問題がある可能性を排除します。
  • 入力する方が簡単です
  • 存在するディレクトリでbuild.xmlを実行しているため、Antビルドが特定のディレクトリを見つけられない可能性があります。

-dは大量の出力を出力するため、キャプチャするか、ターミナルバッファを99999のようなものに設定し、最初にclsを実行してバッファをクリアします。 。この方法では、ターミナルバッファーの最初からのすべての出力をキャプチャします。

Antの実行方法を見てみましょう。実行するターゲットを指定しなかったため、Antはデフォルトのbuildターゲットを使用する必要があります。ここにあります:

<target depends="build-subprojects,build-project" name="build"/>

buildターゲットはそれ自体何もしません。ただし、は他の2つのターゲットに依存するため、これらを最初に呼び出します。

最初のターゲットはbuild-subprojectsです:

<target name="build-subprojects"/>

これは何もしません。依存関係さえありません。

次に指定されるターゲットはbuild-projectにコードがあります:

<target depends="init" name="build-project">

このターゲットには、タスクおよびの依存ターゲットが含まれます。 build-projectを実行する前に、最初にinitターゲットを実行します。

<target name="init">
    <mkdir dir="bin"/>
    <copy includeemptydirs="false" todir="bin">
        <fileset dir="src">
            <exclude name="**/*.Java"/>
        </fileset>
    </copy>
</target>

このターゲットは、binというディレクトリを作成し、srcツリーの下にあるすべてのファイルをbinディレクトリに接尾辞*.Javaでコピーします。 includeemptydirsは、非Javaコードのないディレクトリが作成されないことを意味します。

Antはスキームを使用して最小限の作業を行います。たとえば、binディレクトリが作成された場合、<mkdir/>タスクは実行されません。また、ファイルが以前にコピーされた場合、またはsrcディレクトリツリーに非Javaファイルがない場合、<copy/>タスクは実行されません。ただし、initターゲットは引き続き実行されます。

次に、以前のbuild-projectターゲットに戻ります。

<target depends="init" name="build-project">
    <echo message="${ant.project.name}: ${ant.file}"/>
    <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
        <src path="src"/>
        <classpath refid="iControlSilk4J.classpath"/>
    </javac>
</target>

この行を見てください:

<echo message="${ant.project.name}: ${ant.file}"/>

それは常に実行されるべきでした。出力を印刷しました:

[echo] iControlSilk4J: C:\Silk4J\Automation\iControlSilk4J\build.xml

たぶん、あなたはそれがあなたのビルドからであることに気づかなかったでしょう。

その後、<javac/>タスクを実行します。つまり、実際にコンパイルするファイルがある場合です。繰り返しますが、Antは不要な作業を回避しようとします。すべての*.Javaファイルが以前にコンパイルされている場合、<javac/>タスクは実行されません。

そして、それがビルドの終わりです。何もすることがなかったからといって、ビルドは何もしなかったかもしれません。 cleanタスクを実行してから、buildを実行してみてください:

C:\Silk4J\Automation\iControlSilk4J> ant -d clean build

ただし、Antは通常、実行中のターゲットを出力します。これを見たはずです:

init:

build-subprojects:

build-projects:

    [echo] iControlSilk4J: C:\Silk4J\Automation\iControlSilk4J\build.xml

build:

Build Successful

ターゲットはすべて実行順に印刷され、タスクは実行時に印刷されることに注意してください。ただし、コンパイルするものもコピーするものもない場合、これらのタスクは実行されません。これは出力のように見えますか?もしそうなら、それは何の関係もないかもしれません。

  • binディレクトリが既に存在する場合、<mkdir/>は実行されません。
  • srcに非Javaファイルがない場合、または既にbinにコピーされている場合、<copy/>タスクは実行されません。
  • srcディレクトリにJavaファイルがない場合、またはそれらが既にコンパイルされている場合、<Java/>タスクは実行されません。

-dデバッグからの出力を見ると、Antがタスクを見て、特定のタスクが実行されなかった理由を説明していることがわかります。さらに、デバッグオプションは、実行するタスクをAntが決定する方法を説明します。

それが役立つかどうかを確認してください。

21
David W.

すべてのターゲットを個別に実行して、すべてが正しく実行されていることを確認してください

antターゲット名を実行して、ターゲットを個別に実行します

例えばant build-project

また、指定したデフォルトのターゲットは

project basedir = "。" default = "build" name = "iControlSilk4J"

これはbuild-subprojects、build-project、initのみを実行します

0
Naren

それはまだ実際ですか?

ご覧のとおり、<target depends="build-subprojects,build-project" name="build"/>、それから<target name="build-subprojects"/>(何もしません)。それが理由でしょうか?これは<echo message="${ant.project.name}: ${ant.file}"/>適切なメッセージを出力しますか?いいえの場合、ターゲットは実行されていません。次のリンクをご覧ください http://www.sqaforums.com/showflat.php?Number=623277

0
olyv