是否可以指定一个包含在另一个JAR文件中的JAR文件的Java classpath
?
activation.jar
)。 - Christopher Schultz经过一些研究,我发现了一种不需要Maven或任何第三方扩展/程序的方法。
您可以在清单文件中使用“Class-Path”。
例如:
创建清单文件MANIFEST.MF
Manifest-Version: 1.0
Created-By: Bundle
Class-Path: ./custom_lib.jar
Main-Class: YourMainClass
将所有类编译并运行jar cfm Testing.jar MANIFEST.MF *.class custom_lib.jar
c
代表创建存档
f
表示您想要指定文件
v
用于详细输入
m
表示我们将传递自定义清单文件
请确保在jar包中包含了lib。您应该能够以正常方式运行jar。
基于: http://www.ibm.com/developerworks/library/j-5things6/
您需要了解有关类路径的所有其他信息,请在这里找到。
<jar destfile="your.jar" basedir="java/dir">
...
<zipgroupfileset dir="dir/of/jars" />
</jar>
<jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
<manifest>
<attribute name="Author" value="ntg"/>
................................
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
</manifest>
</jar>
<jar ....">
<zipgroupfileset dir="${external-lib-dir}" includes="*.jar"/>
<manifest>
................................
</manifest>
</jar>
where
<property name="external-lib-dir"
value="C:\...\eclipseWorkspace\Filter\external\...\lib" />
这是存放外部jar包的目录。 就是这样...
如果不编写自己的类加载器,就无法实现。您可以将JAR包添加到JAR包的类路径中,但它们必须位于同一位置,而不能包含在主JAR包中。
你需要构建一个自定义的类加载器来实现这一点,或者使用第三方库来支持此功能。最好的方法是从运行时中提取jar文件,并将它们添加到类路径中(或已经将它们添加到类路径中)。
如果您使用Eclipse,有一种非常简单的方法。
将项目导出为“Runnable”Jar文件(从Eclipse中右键单击项目文件夹,选择“导出...”)。在配置导出设置时,请确保选择“将所需的库提取到生成的Jar中”。请记住,选择“提取...”,而不是“打包所需的库...”。
另外:您必须在导出设置中选择运行配置。因此,您可以始终在某个类中创建一个空的main()并将其用于运行配置。
无论如何,这并不是保证100%可行 - 因为您会注意到弹出消息,告诉您确保检查您包含的Jar文件的许可证以及有关不复制签名文件的内容。但是,我已经这样做了多年,从未遇到过问题。