Java 在jar中包含jar文件

Java 在jar中包含jar文件,java,datasource,c3p0,Java,Datasource,C3p0,我有一个JAR的Java保护。在eclipse works中编译我的项目。没有错误什么的。但当我尝试运行我的应用程序时,它会显示以下内容: java.lang.NoClassDefFoundError:com/mchange/v2/c3p0/DataSources 我需要给这个jar文件另一个来自c3p0的jar文件吗?或者我可以在启动应用程序时链接它们吗?在eclipse中将C3P0添加为外部jar运行示例时,您似乎没有在类路径中添加C3P0 但是,您可以在eclipse中使用maven和m2

我有一个JAR的Java保护。在eclipse works中编译我的项目。没有错误什么的。但当我尝试运行我的应用程序时,它会显示以下内容:

java.lang.NoClassDefFoundError:com/mchange/v2/c3p0/DataSources


我需要给这个jar文件另一个来自c3p0的jar文件吗?或者我可以在启动应用程序时链接它们吗?

在eclipse中将C3P0添加为外部jar

运行示例时,您似乎没有在类路径中添加C3P0

但是,您可以在eclipse中使用maven和m2e插件并添加以下内容

 <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
 </dependency>

c3p0
c3p0
0.9.1.2
除了其他依赖项之外


mvn eclipse之后:eclipse,您的项目将具有正确的类路径。

注意:我理解您在eclipse之外运行时的问题

负责加载类的标准Java类加载器不理解jar文件中的jar文件,因此您需要执行其他操作:

  • 您可以将使用的所有jar文件中的所有类合并到一个jar文件中。(此时推荐给您,而不是一般推荐)
  • 您可以将jar文件放在单个jar文件中,并使用理解这一点的特殊类加载器
  • 您可以将引用的jar放在包含类文件的单个jar文件的“下一个”,并让可运行jar包含引用它们所需的MANIFEST.MF voodo
Eclipse中的
File->Export->Runnable jar
选项可以根据您的选择执行这三项操作。选择一个最适合如何将类传递给最终用户的类


就我个人而言,我喜欢“生成的jar旁边的jar”,因为它最接近Java开箱即用的支持,同时保留了原始jar文件。最简单的方法是合并所有类,但当您变得更高级时,您会发现它有一些缺点-此时您很可能不会遇到它们。

您是在eclipse中运行它,还是作为独立的jar应用程序运行它?@Vulcan No,我不在eclipse中运行它。我必须将其导出为服务器的JAR文件。我的java代码是一个用于基于java的消息服务器的插件。这个问题最终是关于易于部署/安装的,对吗?我认为你最好找一个安装程序,而不是打包所有的应用程序。我已经安装了“Maven Integratio for Eclipse”,并重新启动了Eclipse。我可以把文本C3P0C3P00.9.1.2放在哪里?谢谢你的回复。我不使用可运行的jar,而是使用jar文件。这是其他java软件的插件。@KevinvanderBurgt我不明白“其他java软件的插件”是什么意思。一个很好的猜测是,关于依赖项,您没有正确打包插件。我使用“文件->导出->JAR文件”。我没有“将所需库提取/打包到生成的JAR中”选项。@KevinvanderBurgt如果您使用的是相当现代的Eclipse版本,那么应该有“导出->JAR文件”和“导出->可运行JAR文件”。我使用的是最新版本。但是当我单击Runnable Jar文件时,我无法导出它。