0

私には2つのクラスがZipComparisonありTczipます。Tczipファイルをダイジェストしzipて処理しMD5、エントリをZipComparison検索し.zip、ファイルの2つの異なるバージョンを比較.zipして、同じ内容であるかどうかを判断します。たとえば、package_aそこにあるので、のがのファイルと同じencodes.zipであるかどうかを判断したいと思います。だから私はを処理し、それらが一致する場合は、それをコピーする必要はありません。以下は次のとおりです。package_bencodes.zip.zippackage_aMD5MD5build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project>

    <path id="external.classpath">
        <pathelement location="src/commons-codec-1.2.jar"/>
    </path>

    <target name="clean">
        <delete dir="build" />
    </target>

    <target name="compile">
        <mkdir dir="build/classes" />
        <javac srcdir="src/tczip" destdir="build/classes">
            <classpath>
                <path refid="external.classpath" />
             </classpath>
        </javac>
    </target>

    <target name="jar">
        <mkdir dir="build/jar" />
        <jar destfile="build/jar/Tczip.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="tczip.ZipComparison" />
            </manifest>
        </jar>
    </target>

    <target name="run">
        <java jar="build/jar/Tczip.jar" fork="true" />
    </target>

</project>

だから私はantビルドファイルを作成しようとしています。ZipComparisonを利用しTczipますが、コンパイルすると実行は完璧ですが、コンパイルするとant run次のエラーが発生します。

C:\Users\souzamor\workspace\tczip>ant run
Buildfile: C:\Users\souzamor\workspace\tczip\build.xml

run:
     [java] Processing: bhmcommonclient.zip
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/apach
e/commons/codec/binary/Hex
     [java]     at tczip.Tczip.digest(Unknown Source)
     [java]     at tczip.Tczip.execute(Unknown Source)
     [java]     at tczip.ZipComparison.showFiles(Unknown Source)
     [java]     at tczip.ZipComparison.showFiles(Unknown Source)
     [java]     at tczip.ZipComparison.showFiles(Unknown Source)
     [java]     at tczip.ZipComparison.showFiles(Unknown Source)
     [java]     at tczip.ZipComparison.showFiles(Unknown Source)
     [java]     at tczip.ZipComparison.matchMD5(Unknown Source)
     [java]     at tczip.ZipComparison.main(Unknown Source)
     [java] Caused by: java.lang.ClassNotFoundException: org.apache.commons.code
c.binary.Hex
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
     [java]     ... 9 more
     [java] Java Result: 1

BUILD SUCCESSFUL
Total time: 4 seconds

ステージにTczip欠けていることはわかっていますが、そのようなエラーが発生しないように、どうすればそれを追加できますか?ありがとうcompileZipComparison

4

1 に答える 1

0

クラスがApache Commons Codectczip.Tczipからクラスを探しているようです。この jar が他の依存関係と共にクラスパスにあることを確認してください。Ant要素から JAR ファイルを作成するときにクラスパスを JAR のマニフェストに追加する方法については、この回答を参照してください。<path/>

また、あなたの XML はdependsタグを使用してcompilejarが で実行されていることを確認していrunません。これはビルド スクリプトの実践としては適切ではありません。それは本当に使用する必要がありますdepends

<target name="clean">
    <!-- ... -->
</target>

<target name="compile">
    <!-- ... -->
</target>

<target name="jar" depends="compile">
    <!-- ... -->
</target>

<target name="run" depends="jar">
    <!-- ... -->
</target>
于 2012-09-07T17:48:23.480 に答える