如何从 .java 文件制作 JAR?

问题描述 投票:0回答:9

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

MyApp.java像一个带包的类一样开始,然后导入公共类

MyApp
并具有主要功能,但它仍然是.java文件!如果有帮助的话,我正在 JDeveloper 11g 中编写它。

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

java jar
9个回答
140
投票

打开命令提示符。

转到 .java 文件所在的目录

创建目录build

从命令行运行java编译

javac -d ./build *.java

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

移动到构建目录并执行

jar cvf YourJar.jar *

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


43
投票

只需使用命令行:

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

某些 IDE 会避免使用命令行终端


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 后,可在

file.reference
文件中找到
project.properties
名称。


11
投票

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

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

其中内容为:“create verbose jarFilename manifestFilename”,后跟您要包含的文件。详细意味着打印有关其正在执行的操作的消息。

请注意,您提供的清单文件的名称可以是任何名称,因为

jar
会自动重命名它并将其放入 jar 文件中的正确目录中。


6
投票

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

  1. 使用包创建一个单独的项目(创建项目 - Java - Java 类库)。
  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 -cf myJar.jar *.class
) 创建 jar 文件。


4
投票

从 Java 代码编译 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


0
投票

如果java文件导入了另一个像lombok这样的依赖项,可以这样做

javac -d ./build -cp .:lombok-1.18.34.jar *.java
cd build
jar cvf d-java-17.jar *

然后在构建目录中,您将有一个名为 d-java-17.jar 的 jar,因为它是由 java17 打包的。

© www.soinside.com 2019 - 2024. All rights reserved.