将外部文件添加到build.xml - java / xml

时间:2012-09-07 16:43:47

标签: java ant

我有两个班级,ZipComparisonTczipTczip摘要zip文件并处理其MD5,而ZipComparison搜索.zip条目,并比较.zip个文件的两个不同版本确定它们是否具有相同的内容。例如,在package_a中有encodes.zip,因此我想确定package_b中的encodes.zip是否与{.zip中的package_a文件相同1}}。所以我处理MD5,如果它们匹配,那么我不需要复制MD5build.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阶段缺少compile,但我怎样才能在ZipComparison添加该内容,以便我没有那种错误? 感谢

1 个答案:

答案 0 :(得分:0)

看起来tczip.Tczip类正在寻找来自Apache Commons Codec的课程。确保此jar包含在类路径中以及任何其他依赖项。请参阅this answer,了解在从Ant <path/>元素创建JAR文件时如何将类路径添加到JAR的清单中。

此外,您的XML不使用depends标记来确保使用compile执行jarrun,这不是良好的构建脚本练习。它应该真正使用depends

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

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

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

<target name="run" depends="jar">
    <!-- ... -->
</target>
相关问题