2013-06-27 64 views
2

嘗試運行Java示例應用程序時,出現異常異常。線程「main」中的異常java.lang.NoClassDefFoundError

下面是從控制檯堆棧跟蹤:

$./init-og-examples-db.sh 
     Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/Task 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.Task 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 13 more 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/Task 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.Task 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 13 more 
### Adding example data 
Error: Could not find or load main class com.opengamma.examples.tool.ExampleDatabasePopulator 
### Completed 

我是比較新的Java,所以我不知道爲什麼類沒有被發現,因爲類確實存在:

[email protected]:~/work/dev/java/OG-Platform/projects/OG-Examples/scripts$ find ../../.. -type f -name 'ExampleDatabasePopulator.*' 
../../../projects/OG-Examples/bin/com/opengamma/examples/tool/ExampleDatabasePopulator.class 
../../../projects/OG-Examples/build/classes/com/opengamma/examples/tool/ExampleDatabasePopulator.class 
../../../projects/OG-Examples/src/main/java/com/opengamma/examples/tool/ExampleDatabasePopulator.java 
../../../projects/OG-BloombergExample/bin/com/opengamma/bloombergexample/tool/ExampleDatabasePopulator.class 
../../../projects/OG-BloombergExample/build/classes/com/opengamma/bloombergexample/tool/ExampleDatabasePopulator.class 
../../../projects/OG-BloombergExample/src/main/java/com/opengamma/bloombergexample/tool/ExampleDatabasePopulator.java 

任何人都可以幫我解決這個問題嗎?

[更新]

我也做了以下內容:

取出並手動安裝螞蟻在我的機器上搜索含有該.jar文件

2.字任務(試圖找到實現Task類的文件)

grep -lri Task --include=*.jar /usr/local/apache-ant-1.9.1 
/usr/local/apache-ant-1.9.1/lib/ant-netrexx.jar 
/usr/local/apache-ant-1.9.1/lib/ant-jdepend.jar 
/usr/local/apache-ant-1.9.1/lib/ant-javamail.jar 
/usr/local/apache-ant-1.9.1/lib/ant-junit.jar 
/usr/local/apache-ant-1.9.1/lib/ant-jsch.jar 
/usr/local/apache-ant-1.9.1/lib/ant-apache-xalan2.jar 
/usr/local/apache-ant-1.9.1/lib/ant-junit4.jar 
/usr/local/apache-ant-1.9.1/lib/ant-jmf.jar 
/usr/local/apache-ant-1.9.1/lib/ant.jar 
/usr/local/apache-ant-1.9.1/lib/ant-testutil.jar 
/usr/local/apache-ant-1.9.1/lib/ant-jai.jar 
/usr/local/apache-ant-1.9.1/lib/ant-commons-net.jar 
/usr/local/apache-ant-1.9.1/lib/ant-antlr.jar 
/usr/local/apache-ant-1.9.1/lib/ant-swing.jar 

添加了相關的文件夾到我的CLASSPATH

出口 CLASSPATH = $ CLASSPATH:/usr/local/apache-ant-1.9.1/etc:在/ usr /本地/ Apache的螞蟻-1.9.1/lib目錄

4.確信,我有兩個JAVA_HOMEANT_HOME正確設置

echo $ANT_HOME 
/usr/local/apache-ant-1.9.1 
echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle/jre 

儘管如此,我仍然得到與以前完全相同的錯誤(即堆棧跟蹤與上述相同)。

[第二更新]

這是我運行該腳本文件的內容:

#!/bin/sh 

if [ ! -z "$JAVA_HOME" ]; then 
    JAVA=$JAVA_HOME/bin/java 
elif [ -x /opt/jdk1.6.0_16/bin/java ]; then 
    JAVA=/opt/jdk1.6.0_16/bin/java 
else 
    # No JAVA_HOME, try to find java in the path 
    JAVA=`which java 2>/dev/null` 
    if [ ! -x "$JAVA" ]; then 
    # No java executable in the path either 
    echo "Error: Cannot find a JRE or JDK. Please set JAVA_HOME" 
    exit 1 
    fi 
fi 

if [ "`basename $0`" = "init-og-examples-db.sh" ] ; then 
    cd `dirname $0`/.. #PLAT-1527 
fi 

CLASSPATH=config:og-examples.jar 
for FILE in `ls -1 lib/*` ; do 
    CLASSPATH=$CLASSPATH:$FILE 
done 

echo "### Creating empty database" 

$JAVA -cp "$CLASSPATH" \ 
    -Dlogback.configurationFile=jetty-logback.xml \ 
    com.opengamma.util.test.DbTool \ 
    -jdbcUrl jdbc:hsqldb:file:install/db/hsqldb/example-db \ 
    -database og-financial \ 
    -user "OpenGamma" \ 
    -password "OpenGamma" \ 
    -drop true \ 
    -create true \ 
    -createtables true \ 
    -dbscriptbasedir . 

$JAVA -cp "$CLASSPATH" \ 
    -Dlogback.configurationFile=jetty-logback.xml \ 
    com.opengamma.util.test.DbTool \ 
    -jdbcUrl jdbc:hsqldb:file:temp/hsqldb/og-fin-user \ 
    -database og-financial \ 
    -user "OpenGamma" \ 
    -password "OpenGamma" \ 
    -drop true \ 
    -create true \ 
    -createtables true \ 
    -dbscriptbasedir . 

echo "### Adding example data" 

$JAVA -cp "$CLASSPATH" \ 
    -Xms512M \ 
    -Xmx1024M \ 
    -Dlogback.configurationFile=jetty-logback.xml \ 
    com.opengamma.examples.tool.ExampleDatabasePopulator 

echo "### Completed" 
+1

您沒有包含在類路徑中的類'org.apache.tools.ant.Task'的'.jar'文件。 –

+0

@BrianRoach:請參閱我的更新後的問題 –

+0

對於查找jar,我建議您訪問http://www.findjar.com/index.x –

回答

4

請注意,您的CLASSPATH對您的執行無效。你CLASSPATH必須

export CLASSPATH=$CLASSPATH:/usr/local/apache-ant-1.9.1/etc:/usr/local/apache-ant-1.9.1/lib/ant-netrexx.jar:/usr/local/apache-ant-1.9.1/lib/ant-jdepend.jar:/usr/local/apache-ant-1.9.1/lib/ant-javamail.jar:/usr/local/apache-ant-1.9.1/lib/ant-junit.jar:/usr/local/apache-ant-1.9.1/lib/ant-jsch.jar:/usr/local/apache-ant-1.9.1/lib/ant-apache-xalan2.jar:/usr/local/apache-ant-1.9.1/lib/ant-junit4.jar:/usr/local/apache-ant-1.9.1/lib/ant-jmf.jar:/usr/local/apache-ant-1.9.1/lib/ant.jar:/usr/local/apache-ant-1.9.1/lib/ant-testutil.jar:/usr/local/apache-ant-1.9.1/lib/ant-jai.jar:/usr/local/apache-ant-1.9.1/lib/ant-commons-net.jar:/usr/local/apache-ant-1.9.1/lib/ant-antlr.jar:/usr/local/apache-ant-1.9.1/lib/ant-swing.jar 

如果你只命名的目錄只從目錄中.class文件將被包括在內。

.jar文件必須在CLASSPATH中明確指定,因爲它們不會自動包含在內。

+0

感謝您的更詳細的答案。當你指出,我改變了我的CLASSPATH,然後再次運行演示。我仍然有一個異常和堆棧跟蹤(請參閱堆棧跟蹤的更新問題)。我不禁感到有一件簡單的事情讓我失望 - 但是,當我陷入這個錯誤時,它非常令人沮喪。 –

+0

看來我不能在20小時之後獎賞賞金,因此......我稍後再試。 –

+0

+1用於花時間向Java新手解釋CLASSPATH的特性。 –

1

ant罐子似乎丟失。您可以將它們從here及其下載到類路徑中。

+0

感謝您的回答。但是,我想我已經有了ant:'someone @ yourbox:〜/ work/dev/java/OG-Platform/projects/OG-Examples/scripts $ ant -version Apache Ant(TM)1.8.2版3 2011'我還需要下載螞蟻嗎? –

+0

您的應用程序正在從它需要執行的org.apache.tools.ant'包中搜索Task類。 – JHS

+0

記得設置ANT_HOME路徑變量 – cherit

0

在某些情況下,在最後添加:.。例如:

export CLASSPATH=$CLASSPATH:/usr/local/apache-ant-1.9.1/etc:/usr/local/apache-ant-1.9.1/lib/ant-netrexx.jar:.

相關問題