2013-08-26 119 views
0

標籤 - Selenium以及在使用Ant創建硒測試時遇到類似問題的情況。java.lang.NoClassDefFoundError + ant - 運行一個jar

我已經看到很多這個主題的問題/答案,嘗試了各種論壇上提出的所有選項,但我的問題仍然沒有得到解決。基本上我編譯代碼(包括測試腳本),創建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> 

錯誤:-Exception線程 「main」 java.lang.NoClassDefFoundError:JXL /工作簿

艙單內容

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 
+0

是否包含include jxl.jar ??? –

+0

在lib文件夾中,jxl.jar是否存在? –

+0

是所有必需的JAR都存在於lib文件夾中。 – Akbar

回答

0

的第一件事就是檢查是否問題與清單或別的東西有關。如果您可以使用java -cp <allthejarfiles> <main-class>運行您的應用程序,則問題與清單相關聯。請記住,清單中指定的jar文件與jar文件的位置有關。嘗試使用-verbose:class選項運行應用程序會提示有關哪個jar實際加載。

+0

我把Manifest文件的內容放在上面的註釋中。關於jar文件位置 - 它似乎是從正確的庫文件夾中讀取的,因爲當我嘗試更改時,它拋出了關於文件夾不存在的錯誤。我的項目結構是projectroot/src(源代碼),projectroot/compiled(編譯代碼),projectroot/lib(包含所有項目庫),projectroot/build/jar(JAR目錄)....你是否認爲需要做任何更改在清單類路徑中? – Akbar

+0

在你的評論中,我沒有看到任何路徑,所以JVM會希望所有的jar都在同一個目錄中。這與爲建造的jar和另一個引用的libs創建一個目錄的描述不匹配(除非這些庫也複製到構建目標目錄中)。你有沒有嘗試運行你的應用程序手動指定所有的罐子? – Holger

+0

Manifest文件的內容是(沒有放入整個內容,但列出了所有的JAR作爲空間分離),Manifest-Version:1.0 Ant-Version:Apache Ant 1.8.3 Created-By:1.6.0_41-b02(Sun Microsystems Inc. )主要類:com.portico.driver.TestDriver類路徑:activation.jar commons-lang-2.4.jar jna-3.4.0.jar jxl.jar – Akbar

0

您的清單假定當前工作目錄中的罐子。所以需要將dir屬性設置爲jar所在的文件夾。

Java task支持在參數中提供類路徑。嘗試在參數中給出類路徑。

<target name="run" depends="jar"> 
    <java jar="build/jar/BANC.jar" fork="true" dir="build/jar" > 
     <classpath> 
      <pathelement path="${lib.classpath}"/> 
     </classpath> 
    </java> 
</target> 
+0

嘗試了所有選項,但不起作用 – Akbar

0

我在我的項目中遇到了同樣的問題。我建議你應該爲jar文件創建一個單獨的目錄,將所有的jar放在該目錄中,然後將lib地址指向該目錄。

例如在你的情況說我已經創建了一個目錄D:/jar_collection,在那裏我把我的所有罐子物理。

<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> 

它工作正常。請嘗試一次。

相關問題