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

下面是我的清单文件
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等)?
发布于 2012-09-11 02:36:39
为此,您需要一个自定义的类加载器,看看One Jar。
Java Jar允许您将
应用程序及其依赖Jar打包到一个可执行的Jar文件中。
它有一个ant任务,可以简化它的构建。
REFERENCE (来自background)
大多数开发人员合理地认为,将依赖Jar文件放入他们自己的Jar文件中,并向META-INF/MANIFEST添加一个Class-Path属性将会达到这个目的:
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文件的目录中时,这种方法才有效。
发布于 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中的类加载到类路径中。
发布于 2015-07-07 21:16:47
在Eclipse中,您可以选择导出可执行jar。

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

https://stackoverflow.com/questions/12357136
复制相似问题