我有两个班级,ZipComparison
和Tczip
。 Tczip
摘要zip
文件并处理其MD5
,而ZipComparison
搜索.zip
条目,并比较.zip
个文件的两个不同版本确定它们是否具有相同的内容。例如,在package_a
中有encodes.zip
,因此我想确定package_b
中的encodes.zip
是否与{.zip
中的package_a
文件相同1}}。所以我处理MD5
,如果它们匹配,那么我不需要复制MD5
。 build.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
添加该内容,以便我没有那种错误?
感谢
答案 0 :(得分:0)
看起来tczip.Tczip
类正在寻找来自Apache Commons Codec的课程。确保此jar包含在类路径中以及任何其他依赖项。请参阅this answer,了解在从Ant <path/>
元素创建JAR文件时如何将类路径添加到JAR的清单中。
此外,您的XML不使用depends
标记来确保使用compile
执行jar
和run
,这不是良好的构建脚本练习。它应该真正使用depends
:
<target name="clean">
<!-- ... -->
</target>
<target name="compile">
<!-- ... -->
</target>
<target name="jar" depends="compile">
<!-- ... -->
</target>
<target name="run" depends="jar">
<!-- ... -->
</target>