[英]exception in thread main java.lang.noclassdeffounderror after build with ant
[英]java.lang.NoClassDefFoundError ANT build
我在運行階段遇到類路徑錯誤。 錯誤是
run:
[java] java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
[java] at java.lang.Class.getDeclaredMethods0(Native Method)
[java] at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
[java] at java.lang.Class.privateGetMethodRecursive(Unknown Source)
[java] at java.lang.Class.getMethod0(Unknown Source)
[java] at java.lang.Class.getMethod(Unknown Source)
[java] at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
[java] at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
[java] Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
[java] at java.net.URLClassLoader.findClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[java] at java.lang.ClassLoader.loadClass(Unknown Source)
[java] ... 7 more
[java] Error: A JNI error has occurred, please check your installation and try again
[java] Exception in thread "main"
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 1 second
這是我編寫的xml構建代碼。 我正在引用RunningPower jars文件夾,我相信正在引用正確的文件夾,因為我能夠編譯。 我的基本目錄還包含.classpath和.project文件,但不確定它們是否重要。
<?xml version="1.0" ?>
<project name="SeleniumProjectDataDriven" basedir="." default="run">
<target name="init">
<property name="src.dir" value="src" />
<property name="build.dir" value="build" />
<property name="classes.dir" value="${build.dir}/class" />
<property name="lib.dir" value="RunningPowerJars" />
</target>
<target name="clean" depends="init">
<delete dir="build"/>
</target>
<target name="compile" description="Compiles the code" depends="clean" >
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
</target>
<target name="jar" description="Packages the code into jar" depends="compile">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/RunningPower.jar" basedir="build/class">
<manifest>
<attribute name="Main-Class" value="RunningPower"/>
</manifest>
</jar>
</target>
<target name="run" description="Run the jar file" depends="jar" >
<java jar="build/jar/RunningPower.jar" fork="true"/>
</target>
</project>
在我的RunningPowerJars文件夾中,它們包含
junit-4.8.1.jar
ojdbc6.jar
poi-3.7-20101029.jar
selenium-java-2.46.0.jar
selenium-server-standalone-2.46.0.jar
testng-6.1.1.jar
更新(太平洋標准時間上午7:32 8/21/2015)
<target name="run" description="Run the jar file" depends="jar" >
<java jar="build/jar/RunningPower.jar" fork="true">
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</classpath>
</java>
</target>
我修改了代碼但遇到了另一個錯誤。
BUILD FAILED
C:\Users\dt208672\Perforce\depot\ebill\Automation\Selenium_eBill\RunningPower\build.xml:37: Problem: failed to create task or type classpath
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
運行Jar文件時也需要類路徑,以便JVM可以找到庫類。 但是,在java
任務中使用jar
屬性時, “忽略所有類路徑設置” (請參閱https://ant.apache.org/manual/Tasks/java.html )。 最簡單的方法是指定主類並添加已編譯的Jar以及位於RunningPowerJars
目錄中的庫Jars:
<target name="run" description="Run the jar file" depends="jar" >
<java classname="RunningPower" fork="true">
<classpath>
<pathelement location="build/jar/RunningPower.jar"/>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</classpath>
</java>
</target>
一個不相關的注釋是,您可以在整個構建文件中使用init
中定義的屬性。 例如,在jar
目標中,您可以使用${classes.dir}
而不是重復build/class
。
如果在使用jar
屬性時在java
任務中添加classpath
元素,構建將失敗的原因仍然沒有意義。 盡管它被忽略了,但是由於“創建任務或類型失敗”錯誤而失敗是很奇怪的。
請注意,當您在命令行中使用java.exe時使用-jar參數時,將忽略classpath參數,這也適用於ant中的java任務。
所以,你必須做的就是提供你需要的庫來啟動那個ant,這就足夠了。
曾經說過......那么你應該在哪里添加這些庫? 如果你是從eclipse啟動的,你可以在Ant-> Runtime-> Global Entries下的Window-> preferences上添加它們。
如果您正在使用像jenkins這樣的CI服務器,您可以通過多種方式添加它們,我無法給出直接答案,因為可能有很多。
還有另一種選擇。 您可以聲明.jar MANIFEST.MF的依賴關系並將其放在/ lib或該jar內的任何內容中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.