如何从.java文件制作JAR文件?

110

我正在使用一个Java应用程序(不是项目中具有项目的应用程序,而是项目内部的应用程序;.java),编写一个简单的程序,它只有一个框架。这两个文件都是.java文件,因此我无法编写JAR所需的manifest

MyApp.java像一个类一样开始,有包、导入和公共类MyApp以及主函数,但它仍然是一个.java文件!如果需要,我是在JDeveloper 11g中编写的。

有什么办法可以从这些文件中创建一个JAR文件吗?


2
我认为使用打包工具如ANT或Maven可以更轻松地完成这个任务。 - Churk
同意Chuck的观点。看看ANT。IDE非常适合开发,但您需要了解事物的工作原理。Java文件通过javac编译为.class文件,之后,.class文件可以使用jar命令打包成jar文件。(Ant有用于执行此操作的任务,甚至jdeveloper也有一些向导可供使用)。 - BigMike
JDeveloper本身应该具备创建jar文件的能力。快速的谷歌搜索可以找到一个如何操作的教程:http://tompeez.wordpress.com/2011/06/01/creating-a-jar-file-in-jdeveloper/ - stolzem
1
你可以澄清一下你的问题吗? - Romain Hippeau
进入源代码目录并运行以下命令:javac *.java && jar cvf JarName.jar *.class - garish
8个回答

135

打开命令提示符。

进入您拥有.java文件的目录

创建一个名为“build”的目录

从命令行运行Java编译

javac -d ./build *.java

如果没有错误,在构建目录中应该有你的类树

进入构建目录并执行

jar cvf YourJar.jar *

为了添加清单,请检查JAR命令行开关


我尝试从命令行编译,但是出现了错误: Frame1.java:23: package oracle.jdeveloper.layout 不存在我该如何解决?对于这些新手问题,抱歉。 - user1303007
你需要构建类路径来引用在你的类中使用的所有库。检查一下你的JDeveloper安装,应该有一些Ant构建示例(build.xml文件)和至少几个关于如何在Oracle网站上使用ANT与jDeveloper的好教程。 - BigMike
@user1303007请看这里:http://www.oracle.com/technetwork/articles/adf/part4-098813.html - BigMike
1
我已经添加了一个选项到我的jar命令中,以自动将Main-Class添加到清单中... jar cfe Main.jar Main * (不过我有点困惑,我必须在输出文件名之后放置Main-Class名称。) - user5066707
我想指出:你必须移动到构建目录。如果你尝试使用jar cvf YourJar.jar ./build/*命令,你以后运行JAR文件时会遇到麻烦。 - DarkTrick
@DarkTrick,确切地说,如果你在javac上忘记了-d开关,你会遇到类似的问题。 - BigMike

42

使用命令行即可:

javac MyApp.java
jar -cf myJar.jar MyApp.class

当然,集成开发环境避免使用命令行终端。


11
以上方法可行,不过我需要指定myApp的.class文件。所以命令应该是jar -cf myJar.jar myApp.class - Navigatron
4
这里也有拼写错误,并且假定没有包语句。不充分。 - user207421
这个有效。请问有人能解码这里发生了什么?-cf是什么? - Aawara

21

好的,这是我想要找到的解决方案,但现在我在这里写出来:

首先创建与 .java 文件定义的包相对应的目录结构,如果是 my.super.application,则创建目录 my,在其中创建目录 super,并在其中放置 .java 文件 App.java

然后从命令行执行:

javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

请注意以上内容将包括多个库,如果在Windows下,请使用逗号“,”来分隔多个文件,否则在GNU/Linux下请使用冒号“:”。 创建jar文件。
jar -cvfe App.jar App my/app/

以上代码将创建应用程序及其相应的清单,指示应用程序为主类。

使用Java或jar命令行参数无法将所需的库包含在jar文件中。

您可以选择:

  1. 手动提取库到jar文件的根文件夹
  2. 使用诸如Netbeans之类的IDE,并在nbproject/build-impl.xml的post-jar部分中插入规则以将库提取到jar中。请参见下文。
<target name="-post-jar">
    <!-- Empty placeholder for easier customization. -->
    <!-- You can override this target in the ../build.xml file. -->
    <jar jarfile="${dist.jar}" update="true">
        <zipfileset src="${dist.jar}"                           includes="**/*.class"/>
        <zipfileset src="${file.reference.iText-1.0.8.jar}"     includes="**/*"/>
        <zipfileset src="${file.reference.itextpdf-3.2.1.jar}"  includes="**/*"/>
    </jar>
</target>

在将库添加到Netbeans IDE后,可以在project.properties文件中找到file.reference名称。


11

通常您会想要指定一个清单,像这样:

jar -cvfm myJar.jar myManifest.txt myApp.class

命令为:"create verbose jarFilename manifestFilename",紧跟着要包含的文件。Verbose 意味着打印关于正在执行的操作的消息。

请注意,您提供的清单文件的名称可以是任何内容,因为jar会自动重命名并将其放入JAR文件中的正确目录中。


6

这可以在IDE中直接完成,而无需使用终端。例如Netbeans。

  1. 创建一个带有包的独立项目(创建项目 - Java - Java Class Library)。
  2. 将您的.java类放在那里。
  3. 构建此项目。
  4. 转到您的项目文件夹,并在其中找到build和dist文件夹。
  5. 在dist文件夹中找到.jar文件。
  6. 获取您的另一个项目,并将此.jar文件添加到项目库中。
  7. 现在,如果自动为您导入,您可以直接从代码引用此库及其方法中的类。

5
这是另一种很棒的做法:
$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

这段代码将抓取当前目录下所有的 .java 文件(ls | grep .java),并将它们编译成 .class 文件(xargs -I {} javac {}),然后从之前编译好的类文件中创建 jar 文件(jar -cf myJar.jar *.class)。


4

编译JAR文件的最简单方法可能是使用集成开发环境(IDE,即用于开发的用户友好软件)如Netbeans或Eclipse。这是面向初学者的。

  • 安装并设置IDE。 这里是Eclipse的最新版本
  • 在IDE中创建一个项目,并将Java文件放在项目文件夹内。
  • 在IDE中选择该项目并将其导出为JAR文件。在导出时要确保正确选择了相应的Java文件。

您也可以使用命令行轻松完成所有操作。在执行类似以下命令之前,请确保您位于目标文件所在的同一目录中:

javac YourApp.java
jar -cf YourJar.jar YourApp.class

将“YourApp”和“YourJar”分别改为您的文件的正确名称。

2

如果您有一个简单的主类(比如Count.class),并希望生成一个包含 MANIFEST 文件,其中该文件将此类指定为入口点的 jar 包,可以按照以下步骤操作:

jar cfe app.jar Count Count.class 

来源:https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

JAR文件是Java应用程序的一种常见方式进行分发。它们是包含Java类、资源和元数据的归档文件。在运行时,Java虚拟机可以将JAR文件中的类加载到内存中,并让应用程序使用这些类。
以下是一些有关JAR文件的重要事项:
- JAR文件可以包含可执行代码和库,以及其他资源,如图像和配置文件。 - 您可以使用jar命令创建和提取JAR文件。 - Java Web Start和Java Plug-in技术使得从Web浏览器启动JAR文件变得容易。 - 在使用JAR文件时,请确保您了解其内容并信任其来源。


如何将一个.jar文件(库)包含在新的jar中? - parsecer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接