【问题标题】:Including an jar file in a jar在 jar 中包含 jar 文件
【发布时间】:2012-08-26 21:18:18
【问题描述】:

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

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

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

【问题讨论】:

  • 你是想在 Eclipse 中运行它,还是作为一个独立的 jar 应用程序运行它?
  • @Vulcan 不,我不在 Eclipse 中运行它。我必须将其导出为服务器的 JAR 文件。我的 java 代码是一个基于 java 的消息服务器的插件。
  • 这个问题归根结底是关于易于部署/安装的,对吧?我认为您最好寻找安装程序而不是打包所有应用程序。单个 Jar 中的资源。

标签: java datasource c3p0


【解决方案1】:

注意:我理解您的问题是在 Eclipse 之外运行时出现的。

负责加载你的类的标准 Java 类加载器不理解 jar-files 中的 jar-files,所以你需要做点别的:

  • 您可以将您使用的所有 jar 文件中的所有类合并到一个 jar 文件中。 (目前为您推荐,而非一般推荐
  • 您可以将 jar 文件放入单个 jar 文件中,并使用可以理解这一点的特殊类加载器。
  • 您可以将引用的 jar 放在包含类文件的单个 jar 文件的“旁边”,并让可运行的 jar 包含引用它们所需的必要 MANIFEST.MF voodo。

Eclipse 中的File->Export->Runnable jar 选项可以根据您的选择完成所有三个操作。选择最适合您将课程提供给最终用户的方式。

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

【讨论】:

  • 感谢您的回复。我不使用可运行的 jar,而是使用 Jar 文件。它是其他 java 软件的插件。
  • @KevinvanderBurgt 我不明白“其他 Java 软件的插件”是什么意思。一个很好的猜测是你没有正确打包你的插件关于依赖关系。
  • 我使用“文件 -> 导出 -> JAR 文件”。而且我没有选项“将所需的库提取/打包到生成的 JAR 中”。
  • @KevinvanderBurgt 如果您使用的是相当现代的 Eclipse 版本,则应该 both "Export -> Jar file" AND "Export ->可运行的 Jar 文件”。
  • 我用的是最新版本。但是当我单击 Runnable Jar 文件时,我无法导出它。
【解决方案2】:

在eclipse中添加C3P0作为外部jar

【讨论】:

    【解决方案3】:

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

    但是你可以使用 maven 和 m2e 插件进行 eclipse 并添加以下内容

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

    除了您拥有的其他依赖项。

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

    【讨论】:

    • 我已经安装了“Maven Integratio for Eclipse”并重新启动了 Eclipse。我可以把那个文本放在哪里 c3p0c3p00.9.1.2
    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2014-01-17
    • 2011-06-12
    • 2023-02-12
    相关资源
    最近更新 更多