【问题标题】:How to make an executable JAR file?如何制作可执行的 JAR 文件?
【发布时间】:2011-07-12 14:30:19
【问题描述】:

我有一个由两个简单的 Java Swing 文件组成的程序。

如何为我的程序制作可执行的 JAR 文件?

【问题讨论】:

标签: java jar executable-jar


【解决方案1】:

jar 文件只是一个包含 java 文件集合的文件。要使 jar 文件可执行,您需要指定 main 类在 jar 文件中的位置。示例代码如下。

public class JarExample {

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // your logic here
            }
        });
    }
}

编译你的类。要制作 jar,您还需要创建一个清单文件 (MANIFEST.MF)。例如,

Manifest-Version: 1.0
Main-Class: JarExample

将编译后的输出类文件(JarExample.class,JarExample$1.class)和清单文件放在同一个文件夹中。在命令提示符下,转到放置文件的文件夹,然后使用 jar 命令创建 jar。例如(如果您将清单文件命名为 jexample.mf)

jar cfm jarexample.jar jexample.mf *.class

它将创建可执行的 jarexample.jar。

【讨论】:

  • 只是我的两分钱:您不一定要创建清单文件。对于 jar 实用程序,如果您指定标志 e 而不是 m,那么您只需指定入口点(即main 类),而不是清单文件。示例:jar cvfe jarexample.jar com.example.jar.JarExample *.class
  • 如果您创建 MANIFEST.MF 文件,请不要忘记在最后一行结束时换行。在 Windows 上,只需在末尾添加一个空行。否则最后一个属性不会出现在 jar 文件中。在这种特殊情况下,Main-Class 属性将丢失。
  • jar 命令是否需要单独的路径变量?我可以毫无问题地使用javajavac 命令,但是jar 命令给了我一个'jar' is not recognized as an internal or external command 错误消息。
  • @qwerty 不,它没有。在 linux 上使用命令 which 或在 powershell 中使用 get-command 来查看 javajavac 在您的机器上的实际位置,以及那里是否还有 jar 程序。
【解决方案2】:

Eclipse 中,您可以简单地执行以下操作:

右键单击您的 Java 项目并选择 导出

选择 Java -> 可运行的 JAR 文件 -> 下一步。

选择启动配置并选择项目文件作为您的主类

选择您要保存的目标文件夹,然后单击完成。

【讨论】:

  • 启动配置: -
【解决方案3】:

这里是一行:

jar cvfe myjar.jar package.MainClass *.class

其中MainClass 是带有main 方法的类,packageMainClass 的包。

请注意,在执行此操作之前,您必须将 .java 文件编译为 .class 文件。

c  create new archive
v  generate verbose output on standard output
f  specify archive file name
e  specify application entry point for stand-alone application bundled into an executable jar file

这个答案的灵感来自 Powerslave 对另一个答案的评论。

【讨论】:

  • 我收到一个错误,Error: Could not find or load main class mtx.testClass Caused by: java.lang.ClassNotFoundException: mtx.testClass
  • testClass 是否在您的.class 文件之一中定义?确保在运行此命令之前已编译源 (.java) 文件。此外,通常你的类应该是 UpperCamelCase,你可以尝试将其重命名为 TestClass
【解决方案4】:

如果您使用 maven,请将以下内容添加到您的 pom.xml 文件中:

<plugin>
    <!-- Build an executable JAR -->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.path.to.YourMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

然后你可以运行mvn package。 jar 文件将位于 target 目录下。

【讨论】:

  • 比上面的变种。
【解决方案5】:

现在回答这个问题为时已晚。但是,如果现在有人正在寻找这个答案,我已经让它运行起来没有错误。

首先确保下载并添加 ma​​ven 到路径。如果您已正确添加到路径,[mvn --version] 将为您提供版本规范。

现在,将以下代码添加到 ma​​ven 项目 [pom.xml],在以下代码中替换为您自己的主文件入口点,例如 [com.example.test.Test ]。

      <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                    <mainClass>
            your_package_to_class_that_contains_main_file .MainFileName</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

现在进入项目中的命令行 [CMD] 并输入mvn package,它将在target 目录下生成一个类似于ProjectName-0.0.1-SNAPSHOT.jar 的jar 文件。

现在导航到cd target目标 目录

最后输入java -jar jar-file-name.jar,是的,如果您的程序没有任何错误,这应该会成功。

【讨论】:

  • 这是一个 Maven 特定的解决方案,显然不适用于不使用 Maven 作为构建系统的人。
猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2012-07-06
  • 2023-03-20
  • 2015-07-15
相关资源
最近更新 更多