Java 从Eclipse中的工作应用程序导出后的ClassNotFoundException

Java 从Eclipse中的工作应用程序导出后的ClassNotFoundException,java,eclipse,jar,noclassdeffounderror,classnotfoundexception,Java,Eclipse,Jar,Noclassdeffounderror,Classnotfoundexception,因此,在我将项目导出到可运行的jar之后,我收到了这个消息。我不知道为什么会这样,因为当我在Eclipse中选择“Run”时,应用程序运行得非常完美。我尝试过提取和打包可靠的库,但没有雪茄 有人知道该怎么做吗 Exception in thread "main" java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlDataSource at jp.kddi.geonames.GeoNames.get

因此,在我将项目导出到可运行的jar之后,我收到了这个消息。我不知道为什么会这样,因为当我在Eclipse中选择“Run”时,应用程序运行得非常完美。我尝试过提取和打包可靠的库,但没有雪茄

有人知道该怎么做吗

    Exception in thread "main" java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlDataSource
    at jp.kddi.geonames.GeoNames.getConnectionWithDataSource(GeoNames.java:55)
    at jp.kddi.geonames.GeoNames.setFromGN(GeoNames.java:155)
    at jp.kddi.twittercrawler.Attributes.setCoordinatesGeonames(Attributes.java:297)
    at jp.kddi.twittercrawler.Attributes.setCoordinatesJSON(Attributes.java:280)
    at jp.kddi.twittercrawler.Attributes.SetAll(Attributes.java:42)
    at jp.kddi.twittercrawler.TweetList.makeList(TweetList.java:25)
    at jp.kddi.twittercrawler.TweetCloud.main(TweetCloud.java:45)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 7 more

请在工作区的项目类路径中添加mysql JAR。 下面是必需的罐子,请使用合适的罐子

class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
mysql-connector-java-3.1.12-bin.jar
mysql-connector-java-3.1.12.jar
mysql-connector-java-5.0.7.jar
mysql-connector-java-3.1.14.jar
mysql-connector-java-5.1.5.jar
mysql-connector-java-5.0.4.jar
mysql-connector-java-5.0.5.jar
mysql-connector-java-5.1.4.jar
mysql-connector-java-5.1.3.jar
mysql-connector-java-3.1.11.jar
mysql-connector-java-3.1.13.jar
mysql-connector-java-5.1.1.jar
mysql-connector-java-5.0.2.jar
mysql-connector-java-5.0.8.jar
mysql-connector-java-5.0.3.jar
mysql-connector-java-5.1.2.jar
wildcat-core-2.0.1-embedded.jar
class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource [1216 bytes, jvm >= 1.2 ] 

mysql-connector-java-3.0.16-ga-bin.jar
class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource [1317 bytes, jvm >= 1.2 ] 

mysql-connector-java-5.1.6.jar
class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource [1216 bytes, jvm >= 1.2 ] 

mysql-connector-java-3.0.10-stable-bin.jar
mysql-connector-java-3.0.10.jar
mysql-connector-java-3.0.8-stable-bin.jar
mysql-connector-java-3.0.8.jar

class com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource [735 bytes, jvm >= 1.1 ] 

mysql-connector-java-2.0.14-bin.jar
mysql-connector-java-2.0.14.jar

您有一个
java.lang.ClassNotFoundException
。这意味着应用程序运行时中缺少一个类。您应该检查是否已将所有LIB添加到生成路径

要检查它,只需右键单击
项目->属性->Java构建路径->库
,添加库或创建包含类的库,并为库启用订单导出


显示错误是因为它需要一个
mysql
数据源。你可能没有提供。使用
mysql文件/jar
路径进行检查

看起来您的MySql驱动程序尚未导出。要解决此问题,请转到
项目属性
(右键单击
项目
),选择
属性
,然后选择
Java构建路径
,然后选择
排序并导出
。确保MySql库已导出。

可运行jar中是否有所需的MySql jar

因为它是在Eclipse中编译和运行的,所以构建路径可能是正常的

我认为您还需要通过Eclipse首选项deploymentAssembly选项指定这些JAR。检查这一点的一种方法是导出到war文件,并通过使用检查所需的JAR是否在其中 Export->Java->Runnable JAR文件 相反 导出->Java->JAR文件
在您的项目上(鼠标右键单击)。

将jar文件放在
/tomcat_dir/lib
下,它对我有效。

我检查了MySQL库并再次尝试导出。没有进展。但据我所知,这就是解决问题的方法?有没有办法手动修改jar以包含MySQL驱动程序?没有,我认为你不容易做到;这个想法是,您导出到jar,就完成了。您可以通过使用
jarxfv
将jar文件解压到临时目录,然后检查MySql驱动程序jar或在
META-INF/MANIFEST.mf
文件中查找对它的引用来检查jar文件。检查后发现它不存在。关于可信性,是否所有可信性库都必须在同一目录中才能导出工作?否,它们可以从MANIFEST.mf中引用并指定,就像
-classpath
-cp
java
命令的参数,并且可以位于文件系统中的任何位置。这有点奇怪,因为它被导入并添加到构建路径中。当我在eclipse中按ctrl+f11时,应用程序正在工作,没有问题。我已经检查了MySQL库的订购和导出,但仍然没有包括在内。思想?