当前位置: 首页 > 知识库问答 >
问题:

创建包含其他.jar文件的.jar文件?

戚哲
2023-03-14

我正在尝试制作一个.jar文件(这是我第一次),我很困惑。我了解如何使用命令提示符创建一个简单的jar文件,但对于我的程序,我导入了JavaMail API和我创建的另一个库(名为ArrayLibrary,其中填充了排序方法)。我如何在一个jar文件中创建这些?

共有1个答案

钱经赋
2023-03-14

这个问题经常被问到,所以技术上应该被标记为重复,但是看了前面的问题,我没有找到一个合适的全面的答案。因此,我尝试提供一个:

首先,Java规范不允许在其他jar文件中嵌入jar文件。有一些项目提供了专门的类加载器来允许这样做,但我知道没有一个可以在所有情况下工作。

作为背景,.jar文件实际上是一个包含java类文件和资源的.zip,其树形结构与您在文件系统中发现的相同,如果您没有对它们进行jar处理的话。您可以使用'jar'实用工具或任何zip实用工具创建一个.jar文件--只需将.zip文件重命名为.jar,它就会正常工作。

因此,答案是将所有jar文件展开(un-jar,unzip)到一个目录结构中,然后将它们进行jar备份。然后,新的jar文件将包含所有原始jar文件中的所有工件。

手动执行此操作的问题,除了相当繁琐之外,还在于多个jar文件可能包含同名资源(例如,一个manifest.mf文件)。您可能需要手动组合清单以保持正常工作。

因此,已经创建了许多工具来实现这一自动化。JarSplice似乎就是其中之一,虽然我以前从未听说过它,所以不能说它是否运行良好。

我的个人建议有点涉及,但有其他好处:为项目创建一个Maven构建。然后将maven-assembly插件添加到项目中,并使用它构建一个大jar(称为UberJar)。

另外的好处是,您现在有了一个坚实的项目构建系统,您不再依赖IDE来构建项目,其他人(或者您以后)可以以标准的方式构建项目,而不需要使用特定的IDE。

对于Gradle可能有类似的东西,或者可能有一种方法将Maven插件与Gradle一起使用,但是我没有研究过那个。

虽然我不推荐它,但您也可以使用Ant和它的UberJar插件来实现这一点。

 类似资料:
  • 问题内容: 我想创建一个包含其他JAR库的可执行JAR文件。但是当我执行JAR时,它给出了类路径问题的错误。 我该如何解决类路径问题? 问题答案: 我想您可以这样尝试; 这是一个简单的示例供您提问。首先,假设我们有一个项目目录,例如。然后,在此工作目录中创建一个主类 HelloWorld.java ,其中包含其他JAR文件,例如。现在,我们必须将主类HelloWorld和commons-lang.

  • 问题内容: 我运行以下命令: MyException在dependency.jar中。我也尝试用-classpath替换-cp。我做错了什么? 问题答案: 如果使用,则将忽略这些选项。如果在类路径上需要额外的jar文件,则应在清单中指定以下内容: (然后,您可以使用来运行程序。)

  • 问题内容: 我想用Java构建可运行的jar。我需要在jar中包含一些文件,以便在执行jar时会自动从java类读取文件。因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件。我按照一些教程创建了jar文件,但是无法在jar文件中包含这些外部文件。请让我考虑使用外部文件创建可运行的jar。 我的文件结构是 我访问 的abc.txt 在 test1.java 类。我的代码是 使用eclipse

  • 我想用Java构建一个可运行的jar。我需要在jar中包含一些文件,这样当我执行jar时,文件就会自动从java类中读取。因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件。我按照一些教程创建了jar文件,但我不能在我的jar文件中包含这些外部文件。请允许我使用外部文件创建可运行的jar。 当我使用eclipse导出选项创建可执行jar时,我无法看到jar内部的FileFolder目录。请

  • 我必须创建一个jar文件。我是个初学者。我创建了一个清单文件forjar.txt, jar cfm v.jar forjar.txt gmain.class 它创建了一个jar文件。但是,当我运行它的时候,什么也没有发生。当我编译时,创建了将近25个类,因为我的文件中包含了许多类。那么,我应该在创建jar文件时也包括它吗?或者是否有任何简单的方法,包括特定文件夹的全部内容。我的文件夹也包含程序需要

  • 编译java源文件后的下一个逻辑步骤是构建java归档文件,即JAR文件。 使用jar任务,使用Ant创建JAR文件非常简单。 jar任务的常用属性如下 - Sr.No. 属性和描述 1 basedir 输出JAR文件的基目录。 默认情况下,它设置为项目的基本目录。 2 compress 建议Ant在创建JAR文件时压缩文件。 3 keepcompression 虽然compress属性适用于单个