如何从.java文件制作JAR?


87

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

MyApp.java开始像一类包,然后导入公共类MyApp和具有的主要功能,但它仍然是java文件!如果有帮助,我将在JDeveloper 11g中编写它。

有什么想法如何从这些文件制作JAR吗?


1
我认为使用ANT或Maven等打包工具可以轻松完成此操作
Churk,2012年

同意查克。看一下ANT。IDE非常适合开发,但是您需要了解事物的工作原理。通过javac将java文件编译为.class文件,之后,可以使用jar命令将.class文件打包到jar中。(Ant具有执行此任务的任务,即使jdeveloper也具有执行此操作的向导)。
BigMike 2012年

JDeveloper本身应该具有创建jar文件的能力。快速谷歌搜索来了一个HOWTO在这里:tompeez.wordpress.com/2011/06/01/...
stolzem

1
你能澄清你的问题吗?
罗曼·希波

转到源目录并运行命令:-javac * .java && jar cvf JarName.jar * .class
花哨的

Answers:


102

打开命令提示符。

转到您拥有.java文件的目录

创建目录构建

从命令行运行Java编译

javac -d ./build *.java

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

移至构建目录并执行

jar cvf YourJar.jar *

用于添加清单检查jar命令行开关


我尝试从命令行进行编译,但出现错误:Frame1.java:23:包oracle.jdeveloper.layout不存在如何解决该问题?对不起,新手问题...
user1303007 2012年

您必须构建类路径,以引用您在类中引用的所有库。检查您的jdeveloper安装,应该有一些ant生成示例(build.xml文件),以及至少两个关于如何在Oracle网站上结合使用jDeveloper和ANT的很好的教程。
BigMike 2012年


1
我在jar命令中添加了一个选项,以自动将Main-Class添加到清单中... jar cfe Main.jar Main *(尽管我很困惑,我不得不将Main-Class名称放在输出文件名之后。)
Hydroper

31

只需使用命令行即​​可:

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

确保IDE避免使用命令行终端


11
上面的工作,但是我需要指定.classmyApp。就是这样jar -cf myJar.jar myApp.class
Navigatron

3
这里也拼写错误,并假定没有package语句。不够。
洛恩侯爵

14

好的,这是我想找到的解决方案,我在这里写了:

首先创建与为.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名称。


9

通常,您将需要指定一个清单,例如:

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

内容为:“创建详细的jarFilename manifestFilename”,后跟要包含的文件。详细表示打印有关其操作的消息。

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


6

无需终端即可直接从IDE完成此操作。以Netbeans为例。

  1. 使用包创建一个单独的项目(创建项目-Java-Java类库)。
  2. 将您的.java类放在这里。
  3. 建立这个专案。
  4. 转到您的项目文件夹,然后在其中找到build和dist文件夹。
  5. 在您的dist文件夹中找到.jar文件。
  6. 获取其他项目,然后将此.jar文件添加到项目库中。
  7. 现在,如果自动为您完成导入,则可以直接从代码中引用此库中的类及其方法。

3

这是执行此操作的另一种理想方式:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

它将ls | grep .java从当前目录中获取所有.java文件()并将其编译为.class(xargs -I {} javac {}),然后从先前编译的类(jar -cf myJar.jar *.class)创建jar文件。


2

从Java代码编译JAR的最适合初学者的方法可能是使用IDE(集成开发环境;本质上只是用于开发的用户友好软件),例如Netbeans或Eclipse。

  • 安装并设置一个IDE。这是Eclipse的最新版本
  • 在IDE中创建一个项目,然后将Java文件放入项目文件夹中。
  • 在IDE中选择项目,然后将项目导出为JAR。仔细检查导出时是否选择了适当的Java文件。

您始终可以使用命令行非常轻松地完成所有操作。执行以下命令之前,请确保您与目标文件位于同一目录中:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.