2012-07-09 163 views
0

我是新的從Windows命令行運行Java並不能讓我的程序運行。概述,這裏正是我試圖做的事:NoClassDefFoundError當從Windows命令行運行Java與外部jar文件

運行兩個.java文件,TestCase1.java和UniversalVariables.java
包含多個外部JAR文件
做到這一切的命令行

TestCase1.java具有所有功能代碼,而UniversalVariables.java幾乎只包含一些數據,所以不要讓所有內容混淆。

應該指出,我使用Selenium並通過Eclipse運行它。

這裏是TestCase1.java:

package NSSR; 

import com.thoughtworks.selenium.*;<br> 
import org.junit.After;<br> 
import org.junit.Before;<br> 
import org.junit.Test;<br> 

//Create new NSSR 

public class TestCase1 extends SeleneseTestCase { 

    public static void main(String[] args) { 
     TestCase1 tc1 = new TestCase1(); 
     try { 
      tc1.setUp(); 
      tc1.testTestCase1(); 
      tc1.tearDown(); 
     } catch (Exception e) { 

     } 
    } 

    @Before 
    public void setUp() throws Exception { 
     selenium = new DefaultSelenium("localhost", 4444, "*firefox", 
       UniversalVariables.baseAddress); 
     selenium.start(); 
    } 

    @Test 
    public void testTestCase1() throws Exception { 
     selenium.open(UniversalVariables.loginPage); 
     selenium.type("name=USERNAME", UniversalVariables.username); 
     selenium.type("name=PASSWORD", UniversalVariables.password); 
     selenium.click("link=Submit"); 
     selenium.waitForPageToLoad("60000"); 
     selenium.open("/itg/dashboard/app/portal/PageView.jsp?IS_WINDOID=N"); 
     selenium.click("link=Create"); 
     selenium.click("link=Request"); 
     selenium.waitForPageToLoad("30000"); 
     selenium.select("name=REQUEST_TYPE_CREATE", 
       "label=Non-Standard Service"); 
     selenium.click("css=span.secBtn > a"); 
     selenium.waitForPageToLoad("30000"); 
     String title = UniversalVariables.getRandomTitle(); 
     String req = UniversalVariables.Requestor; 
     String dept = UniversalVariables.reqDept; 
     String desc = UniversalVariables.getRandomDescription(); 
     String date = UniversalVariables.getRandomDate(); 
     System.out.println(title); 
     System.out.println(req); 
     System.out.println(dept); 
     System.out.println(desc); 
     System.out.println(date); 
     selenium.type("id=REQ.DESCRIPTION", title); 
     selenium.type("id=REQ.P.REQUESTORAC_TF", req); 
     selenium.select("id=REQ.P.REQUESTOR_DEPT", dept); 
     selenium.type("id=REQ.P.DETAIL_DESC", desc); 
     selenium.type("REQ.P.REQ_COMPL_DATE", date); 
     selenium.click("link=Submit"); 
     selenium.waitForPageToLoad("30000"); 
     selenium.refresh(); 
    } 

    @After 
    public void tearDown() throws Exception { 
     selenium.stop(); 
    } 
} 

這裏是UniversalVariables.java:

package NSSR; 

import java.util.*; 

public class UniversalVariables { 

    public static String baseAddress = "******"; 
    public static String loginPage = "******"; 
    public static String username = "******"; 
    public static String password = "******"; 
    public static ArrayList<String> NSSR_Titles = new ArrayList<String>(NSSR_Titles()); 
    public static String Requestor = "******"; 
    public static String reqDept = "Shared Services"; 
    public static ArrayList<String> NSSR_Descriptions = new ArrayList<String>(NSSR_Descriptions()); 
    public static ArrayList<String> NSSR_Dates = new ArrayList<String>(NSSR_Dates()); 
    public static Random randy = new Random(); 
    public static int num; 

    public static String getRandomTitle() { 
     num = randy.nextInt(NSSR_Titles.size()); 
     return NSSR_Titles.get(num); 
    } 

    public static String getRandomDescription() { 
     num = randy.nextInt(NSSR_Descriptions.size()); 
     return NSSR_Descriptions.get(num); 
    } 

    public static String getRandomDate() { 
     num = randy.nextInt(NSSR_Dates.size()); 
     return NSSR_Dates.get(num); 
    } 

    public static ArrayList<String> NSSR_Titles() { 
     ArrayList<String> list = new ArrayList<String>(); 
     for(int i = 1; i < 11; i++) 
      list.add("Title " + i); 
     return list; 
    } 

    public static ArrayList<String> NSSR_Descriptions() { 
     ArrayList<String> list = new ArrayList<String>(); 
     for(int i = 1; i < 11; i++) 
      list.add("Description " + i); 
     return list; 
    } 

    public static ArrayList<String> NSSR_Dates() { 
     ArrayList<String> list = new ArrayList<String>(); 
     for(int i = 1; i < 13; i++) 
      for(int j = 1; j < 29; j++) 
       for(int k = 13; k < 100; k++) { 
        String str = i + "/" + j + "/20" + k; 
        list.add(str); 
       } 
     return list; 
    } 
} 

這是我投入命令行(這些都是的我使用的jar文件,我知道這不是很漂亮...忍耐着我):

>javac -classpath C:\JAR\junit-4.0.jar;C:\JAR\junit-4.0-src.jar;C:\JAR\selenium-java-c 
lient-driver.jar;C:\JAR\selenium-java-client-driver-sources.jar;C:\JAR\selenium- 
java-client-driver-tests.jar;C:\JAR\selenium-java-client-driver-test-sources.jar 
;C:\JAR\selenium-server.jar;C:\JAR\selenium-server-coreless.jar;C:\JAR\selenium- 
server-sources.jar;C:\JAR\selenium-server-standalone-2.24.1.jar; NSSR\TestCase1. 
java NSSR\UniversalVariables.java 

編譯得很好。然後我把進入命令行這樣的:

>java NSSR.TestCase1 

然後是錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: com/thoughtworks/sele 
nium/SeleneseTestCase 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     at java.lang.ClassLoader.defineClass(Unknown Source) 
     at java.security.SecureClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.defineClass(Unknown Source) 
     at java.net.URLClassLoader.access$000(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.thoughtworks.selenium.SeleneseT 
estCase 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 12 more 
Could not find the main class: NSSR.TestCase1. Program will exit. 

僅供參考,這是我的CLASSPATH:

; C:\ Program Files文件\的Java \ jre6 \ lib \ ext \ QTJava.zip; C:\ WINDOWS \ system32 \ java.exe \ lib; C:\ Program Files \ IBM \ RationalSDLC \ ClearQuest \ cqjni.jar; C:\ JAR * .jar

任何幫助,非常感謝!

回答

3

您還需要將罐子作爲參數放置到java,與您通過javac時相同。

+0

工作正常!謝謝! – jrad 2012-07-09 15:25:49

0
java -classpath "C:\JAR\junit-4.0.jar;C:\JAR\junit-4.0-src.jar;C:\JAR\selenium-java-client-driver.jar;C:\JAR\selenium-java-client-driver-sources.jar;C:\JAR\selenium-java-client-driver-tests.jar;C:\JAR\selenium-java-client-driver-test-sources.jar;C:\JAR\selenium-server.jar;C\JAR\selenium-server-coreless.jar;C:\JAR\selenium-server-sources.jar;C:\JAR\selenium-server-standalone-2.24.1.jar" NSSR.TestCase1 

應該做你想做的。 java也需要知道在哪裏可以找到這些庫。它不存儲在引用類文件中(不應該,因爲它只適合您自己的系統)

+0

看起來像垃圾打敗你。雖然謝謝! – jrad 2012-07-09 15:35:05

+0

C'est la vie! :) – zpea 2012-07-09 15:38:44

+0

在任何情況下,我可能會補充說,您幾乎不需要任何包含在類路徑中的庫。此外,在您的測試基礎增長之前,請考慮使用WebDriver(又名Selenium 2)而不是舊的Selenium 1. Selenium IDE中的代碼導出選項稱爲「Junit(WebDriver)」,以防萬一您想知道。該代碼使用了更少的顯式等待,WebDriver得到了所有大型瀏覽器製造商的正式支持。 – zpea 2012-07-09 15:43:47

相關問題