首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jar中的引用jar

jar中的引用jar
EN

Stack Overflow用户
提问于 2012-09-11 02:05:16
回答 7查看 107.7K关注 0票数 57

我有一个jar,它的内容如下所示:

下面是我的清单文件

代码语言:javascript
复制
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_06-b24 (Oracle Corporation)
Main-Class: org.sai.com.DerbyDemo
Class-Path: derby.jar derbyclient.jar derbynet.jar derbytools.jar

当我尝试运行jar时,它抛出了一个ClassNotFoundExcception,这意味着它没有引用外部jar中的jar。

Class-Path属性中,如何在实际的jar中引用jar (derby.jar等)?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-11 02:36:39

为此,您需要一个自定义的类加载器,看看One Jar

Java Jar允许您将

应用程序及其依赖Jar打包到一个可执行的Jar文件中。

它有一个ant任务,可以简化它的构建。

REFERENCE (来自background)

大多数开发人员合理地认为,将依赖Jar文件放入他们自己的Jar文件中,并向META-INF/MANIFEST添加一个Class-Path属性将会达到这个目的:

代码语言:javascript
复制
jarname.jar
| /META-INF
| |  MANIFEST.MF
| |    Main-Class: com.mydomain.mypackage.Main
| |    Class-Path: commons-logging.jar
| /com/mydomain/mypackage
| |  Main.class
| commons-logging.jar

不幸的是这是不能工作的。Java不知道如何使用这种Class-Path从Jar内的Jar装入类。尝试使用jar:file:jarname.jar!/commons-logging.jar也会走入死胡同。仅当您将支持的Jar文件安装(即分散)到安装jarname.jar文件的目录中时,这种方法才有效。

票数 39
EN

Stack Overflow用户

发布于 2012-09-11 02:37:15

你不能。从official tutorial

通过在清单中使用类路径标头,您可以避免在调用

来运行应用程序时必须指定一个长-classpath标志。

注意: Class-Path标头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或可通过internet协议访问的类。要将JAR文件内的JAR文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果MyJar.jar包含另一个名为MyUtils.jar的JAR文件,则不能使用MyJar.jar清单中的Class-Path标头将MyUtils.jar中的类加载到类路径中。

票数 24
EN

Stack Overflow用户

发布于 2015-07-07 21:16:47

在Eclipse中,您可以选择导出可执行jar。

您可以选择将所有与项目相关的jar打包到生成的jar中,通过这种方式,eclipse添加自定义类加载器,它将引用新jar中的集成jar。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12357136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档