0

Netbeans から移動したばかりの確立された Java プロジェクト用に、最初の build.xml ファイルを作成しようとしています。

A. 私が達成しようとしている目標は非常に単純です。

  1. 以下の「dest」ターゲットを使用して、すべてのソース ファイル (1 つのパッケージから全部で 4 つ) を、作成しようとしている src/test にコピーします。ソースファイルは「src/test」ディレクトリにコピーされましたが、「src/test」ディレクトリに「test」ディレクトリも作成されました。なぜかわからないのですが。

  2. 以下の「jar」ターゲットを使用して、パッケージ名ディレクトリの下にすべてのクラス ファイルを含む jar を作成します - まったく機能しませんでした!

  3. 「コンパイル」ターゲットを使用して、すべてのコードが正常にコンパイルされるようにしましたが、多くのエラーが発生しました。このコードは Eclipse で CLEAN と BUILD を正常に実行するため、ANT スクリプトで何が間違っていたのかわかりませんが、「4」しかないのに「8」個のファイルをコンパイルしようとしていたことに気付きました。重複を示していますが、他の4つがどこから来ているのかわかりません。不足しているシンボルに関して表示されるエラーは、ビルド パスに含まれる必要なプロジェクトに関するインポート ステートメントを参照しているように見えるため、ANT がコンパイルで発生させる問題に対処する方法がわかりません。

B. これは、最初の build.xml ファイルを作成する最初の試みですが、以下に示す問題が発生しています。

<project name="ThalesDataGenerator" basedir="." default="clean-build">

    <property name="src.dir"     value="src"/>
    <property name="dest.dir"    value="${src.dir}/test"/>

    <property name="dist.dir"    value="dist"/>

    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/${ant.project.name}"/>

    <property name="main-class"  value="thalesdatagenerator.ThalesDataGenerator"/>

    <target name="clean">
        <delete dir="${build.dir}"/>
        <delete dir="${dest.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

    <target name="dest">
        <mkdir dir="${dest.dir}"/>
        <copy todir="${dest.dir}">  
            <fileset dir="${src.dir}" includes="**"/>  
        </copy>
    </target>

    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/ThalesDataGenerator.jar" basedir="${build.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>       

    <target name="run" depends="jar">
        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,dest,jar,run"/>

</project>

ここに私が得たエラーがあります:

  • > ビルドファイル: C:\ATMSwitch\ThalesDataGenerator\build.xml クリーン:
  • > [delete] ディレクトリ削除 C:\ATMSwitch\ThalesDataGenerator\build
  • >宛先:
  • > [mkdir] 作成されたディレクトリ: C:\ATMSwitch\ThalesDataGenerator\src\test
  • > [コピー] 4 つのファイルを C:\ATMSwitch\ThalesDataGenerator\src\test にコピー
  • > [コピー] C:\ATMSwitch\ThalesDataGenerator\src\test の下に 2 つの空のディレクトリを 1 つの空のディレクトリにコピーしました
  • > コンパイル:
  • > [mkdir] 作成されたディレクトリ: C:\ATMSwitch\ThalesDataGenerator\build\classes
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\build.xml:22: 警告: 'includeantruntime' が設定されていませんでした。デフォルトは build.sysclasspath=last です。繰り返し可能なビルドの場合は false に設定
  • > [javac] 8 つのソース ファイルを C:\ATMSwitch\ThalesDataGenerator\build\classes にコンパイルする
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\thalesdatagenerator\ISOUtil.java:36: 重複クラス: thalesdatagenerator.ISOUtil
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesDataGenerator.java:13: パッケージ common.database が存在しません
  • > [javac] import common.database.Database;
  • > [javac] ^
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesSystem.java:13: パッケージ com.sharpbancsystems.atmterminals.thales が存在しません
  • > [javac] 注: C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesDataGenerator.java は、未チェックまたは安全でない操作を使用します。
  • > [javac] 注: 詳細については、-Xlint:unchecked で再コンパイルしてください。
  • [javac] 18 エラー

  • ビルドに失敗しました

  • C:\ATMSwitch\ThalesDataGenerator\build.xml:22: コンパイルに失敗しました。詳細については、コンパイラ エラー出力を参照してください。

  • 合計時間: 874 ミリ秒

どんな助け/指示も大歓迎です。よろしく。

4

2 に答える 2

1

これを一度に1つずつ取り上げましょう。

いくつかのヒント:

  • ${basedir}プロパティを定義するときに使用します。たとえば、<property name="src.dir" value="${basedir}/src"/>単にではなくvalue="src"/>
  • デフォルトのターゲットの一部として強制的にクリーンアップしないでください。標準のデフォルトターゲットはjarをビルドする必要があり、それだけです。クリーンアップを行うと、不要な作業が重複します。名前の付いたターゲットを使用して、allクリーンアップ、ビルド、および実行できます。
  • 上記のように、デフォルトのターゲット名を使用cleanしてビルドをクリーンアップし、ビルドall内のすべてのターゲットを実行します。これらのどちらもデフォルトのターゲットであってはなりません。

さて、あなたの問題に戻りましょう。ターゲット<javac>は次のようになります。

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>

ソースが依存しているサードパーティのjarファイルはないと言っていますか?ソースが依存するすべてのサードパーティjarを含むコンパイルクラスパスを作成する必要があります。Eclipseには、使用している組み込みのクラスパスがあります。Antでは、これを指定する必要があります。

ソースをコンパイルするために必要なすべてのjarファイルがに格納されていると仮定しましょう${basedir}/lib。コンパイルターゲットは次のようになっている必要があります

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <path id="compile.classpath">
        <fileset dir="${basedir}/lib">
           <include name="**/*.jar"/>
        </fileset>
    </path>
    <javac srcdir="${src.dir}" 
        classpathref="compile.classpath"
        destdir="${classes.dir}"/>
</target>

これを行うには多くの方法がありますが、構文的にはこれが最も簡単です。必要なすべてのjarを含むcompile.claasspath<path>を定義するために使用します。それらはすべてディレクトリに存在するため、非常に簡単でした。lib

次に、Javaコードをコンパイルするときに、 classpathrefパラメーターを使用してこのクラスパスを指定します。

これにより、クラスがコンパイルされます(これは現在行われていません)。ターゲットのコンパイルが失敗するため、Antビルドは<jar>タスクが呼び出される前にそこで終了します。コンパイルを機能させると、ビルドの残りの部分が機能するようになります。

于 2012-12-19T17:28:39.167 に答える
0

私に起こりました。selenium-server-standalone-3.4.0.jar を C:\jars ディレクトリ (ws.jars) にコピーしていなかったためです。

于 2017-07-27T01:32:59.607 に答える