【问题标题】:How do I make a JAR from a .java file?如何从 .java 文件制作 JAR?
【发布时间】:2012-04-14 00:56:57
【问题描述】:

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

MyApp.java 开始像一个带有包的类,然后导入公共类MyApp 并有一个主函数,但它仍然是.java 文件!如果有帮助,我会在 JDeveloper 11g 中编写它。

任何想法如何从这些文件制作 JAR?

【问题讨论】:

  • 我认为这可以通过使用 ANT 或 Maven 等打包工具更轻松地完成
  • 同意查克。看看蚂蚁。 IDE 非常适合开发,但您需要了解事物的工作原理。 java 文件通过 javac 编译成 .class 文件,之后可以使用 jar 命令将 .class 文件打包成 jar。 (Ant 有执行此操作的任务,甚至 jdeveloper 也有执行此操作的向导)。
  • JDeveloper 本身应该具有创建 jar 文件的能力。一个快速的谷歌搜索会在这里找到一个方法:tompeez.wordpress.com/2011/06/01/…
  • 你能澄清你的问题吗?
  • 转到源目录并运行命令:- javac *.java && jar cvf JarName.jar *.class

标签: java jar


【解决方案1】:

打开命令提示符。

转到您的 .java 文件所在的目录

创建目录构建

从命令行运行java编译

javac -d ./build *.java

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

移动到构建目录并做一个

jar cvf YourJar.jar *

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

【讨论】:

  • 我尝试从命令行编译,但我得到一个错误:Frame1.java:23: package oracle.jdeveloper.layout 不存在我该如何解决?抱歉新手问题...
  • 您必须构建引用您在类中引用的所有库的类路径。检查您的 jdeveloper 安装,应该有一些 ant 构建示例(build.xml 文件)和至少几个关于如何在 Oracle 网站上使用 jDeveloper 和 ANT 的好教程。
  • 我在我的 jar 命令中添加了一个选项来自动将 Main-Class 添加到清单中...jar cfe Main.jar Main *(虽然我很困惑,我不得不把 Main-输出文件名后的类名。)
  • 我想指出:You have to move to build directory。如果你尝试jar cvf YourJar.jar ./build/*,你以后运行你的jar文件会有问题。
【解决方案2】:

只需命令行:

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

当然 IDE 避免使用命令行终端

【讨论】:

  • 上述方法有效,但我需要指定 myApp 的 .class。所以是jar -cf myJar.jar myApp.class
  • 这里也有拼写错误,它假定没有包声明。不够。
【解决方案3】:

好的,这是我希望找到的解决方案,我在这里写它:

首先创建与为.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/

上面将创建应用程序,其对应的 Manifest 指示 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 名称。

【讨论】:

    【解决方案4】:

    您通常需要指定一个清单,如下所示:

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

    内容为:“create verbose jarFilename manifestFilename”,后跟要包含的文件。详细意味着打印关于它正在做什么的消息。

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

    【讨论】:

      【解决方案5】:

      这可以在没有终端的情况下直接从 IDE 完成。例如,Netbeans。

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

      【讨论】:

        【解决方案6】:

        这是另一种奇妙的方法:

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

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

        【讨论】:

          【解决方案7】:

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

          • 安装和设置 IDE。 Here is the latest version of Eclipse
          • 在您的 IDE 中创建一个项目并将您的 Java 文件放入项目文件夹中。
          • 在 IDE 中选择项目并将项目导出为 JAR。仔细检查导出时是否选择了适当的 java 文件。

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

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

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

          【讨论】:

            【解决方案8】:

            如果您有一个简单的主类(比如说 Count.class),并且想要一个带有指向该类作为入口点的 MANIFEST 文件的 jar,您可以这样做:

            jar cfe app.jar Count Count.class 
            

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-01-07
              • 2014-05-04
              • 2015-08-15
              • 2012-07-06
              • 2013-07-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多