[英]java.lang.NoClassDefFoundError + ant - running a jar
标记硒,以防万一有人在使用Ant创建硒测试时遇到类似问题。
我已经看到了很多关于此主题的问题/答案,尝试了各种论坛上建议的所有选项,但仍然没有解决我的问题。 基本上,我编译代码(包括测试脚本),创建JAR并运行相同的JAR。 由于某种原因,它似乎在运行时无法识别库。 从Eclipse运行main()方法时,相同的代码(带有测试)可以正常工作。 这是build.xml,
<project default="run">
<target name="clean">
<delete dir="build" />
</target>
<target name="init-classpath">
<path id="lib.classpath">
<fileset dir="./lib/">
<include name="**.jar" />
</fileset>
</path>
<pathconvert property="mf.classpath" pathsep=" ">
<path refid="lib.classpath" />
<flattenmapper />
</pathconvert>
</target>
<target name="jar" depends="clean, init-classpath">
<javac classpathref="lib.classpath" destdir="./compiled" failonerror="true" srcdir="./src" />
<mkdir dir="build/jar" />
<jar destfile="build/jar/BANC.jar" basedir="compiled">
<manifest>
<attribute name="Main-Class" value="com.portico.driver.TestDriver" />
<attribute name="Class-Path" value="${mf.classpath}" />
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="build/jar/BANC.jar" fork="true">
</java>
</target>
</project>
错误:线程“ main”中的异常java.lang.NoClassDefFoundError:jxl / Workbook
清单内容
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_41-b02 (Sun Microsystems Inc.)
Main-Class: com.portico.driver.TestDriver
Class-Path: activation.jar commons-lang-2.4.jar jna-3.4.0.jar jxl.jar
logging-selenium-1.2.jar mail.jar ojdbc14.jar poi-3.0.2-FINAL.jar rep
ortng-1.1.1.jar saxon-8.7.jar selenium-grid-demo-1.0.7.jar selenium-g
rid-demo-standalone-1.0.7.jar selenium-grid-hub-1.0.7.jar selenium-gr
id-hub-standalone-1.0.7.jar selenium-grid-remote-control-1.0.7.jar se
lenium-grid-remote-control-standalone-1.0.7.jar selenium-grid-tools-1
.0.7.jar selenium-grid-tools-standalone-1.0.7.jar selenium-server-1.0
.3-standalone.jar selenium-server-standalone-2.33.0.jar sikuli-script
.jar testng-6.8.jar velocity-1.7.jar
首先要检查的是问题是否与清单有关。 如果可以使用java -cp <allthejarfiles> <main-class>
运行应用程序,则问题与清单有关。 请记住,清单中指定的jar文件是相对于jar文件位置的。 尝试使用-verbose:class选项运行该应用程序可提供有关实际加载哪个jar的提示。
您的清单假定这些jar位于当前工作目录中。 因此,需要将dir属性设置为jar所在的文件夹。
Java任务支持在参数中提供类路径。 尝试在参数中提供类路径。
<target name="run" depends="jar">
<java jar="build/jar/BANC.jar" fork="true" dir="build/jar" >
<classpath>
<pathelement path="${lib.classpath}"/>
</classpath>
</java>
</target>
我在项目中也遇到过同样的问题。 我建议您应该专门为jar文件创建一个单独的目录,将所有jar保存在该目录中,然后将lib地址指向该目录。
例如,在您的情况下,说我已经创建了一个目录D:/jar_collection
,我将所有的jar都放置在这里。
<property name="lib.dir" value="D:/jar_collection"/>
<target name="setClassPath">
<path id="classpath_jars">
<fileset dir="${lib.dir}" includes="*.jar" />
</path>
<pathconvert pathsep=":" property="test.classpath" refid="classpath_jars" />
</target>
而且效果很好。 请尝试一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.