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"/>
...
Ant Webサイトにアクセスし、 ダウンロード を入力します。これにより、EclipseのAntoutsideのコピーが作成されます。 C:\ant
ディレクトリの下に置くことをお勧めします。この方法では、ディレクトリ名にスペースが含まれません。システムコントロールパネルで、環境変数ANT_HOME
をこのディレクトリに設定し、システムPATH
variable、%ANT_HOME%\bin
の前に追加します。この方法では、ディレクトリ名全体を入力する必要はありません。
上記を実行したと仮定して、これを試してください:
C:\> cd \Silk4J\Automation\iControlSilk4J
C:\Silk4J\Automation\iControlSilk4J> ant -d build
これにより、いくつかのことが行われます。
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が決定する方法を説明します。
それが役立つかどうかを確認してください。
すべてのターゲットを個別に実行して、すべてが正しく実行されていることを確認してください
antターゲット名を実行して、ターゲットを個別に実行します
例えばant build-project
また、指定したデフォルトのターゲットは
project basedir = "。" default = "build" name = "iControlSilk4J"
これはbuild-subprojects、build-project、initのみを実行します
それはまだ実際ですか?
ご覧のとおり、<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