当前位置: 首页 > 知识库问答 >
问题:

JAR命令不使用提供的清单

鞠安民
2023-03-14

不确定为什么我会出现这个错误,我觉得我错过了一些非常简单的东西。这是我在试图跟随这篇文章从命令行创建JAR可执行文件时面临的一个问题。以下是我的简单测试文件:

例如。爪哇:

public class JarExample {
    public static void main(String[] args) {
        
    }
}

显示MF:

Manifest-Version: 1.0
Main-Class: JarExample

我运行以下命令来构造JAR:

javac JarExample.java
jar cfm JarExample.jar MANIFEST.MF *.class

然而,当我运行java-jar JarExample.jar时,我得到以下错误:

no main manifest attribute, in JarExample.jar

在JAR中达到峰值时,会出现正确的类文件,但会出现以下自动生成的清单,META-INF/manifest。MF,存在于:

Manifest-Version: 1.0
Created-By: 1.8.0_162 (Oracle Corporation)

那么我对jar命令的用法哪里不正确呢?为什么它不能识别我提供的清单文件?

谢谢

共有1个答案

颛孙镜
2023-03-14

我已经完成了您描述的所有步骤,并且已经成功创建了一个可执行的jar文件。

我正在使用openjdk11.0.11 2021-04-20

. jar文件中生成的文件如下所示:

Manifest-Version: 1.0
Main-Class: JarExample
Created-By: 11.0.11 (Ubuntu)

所以这可能是由于您的Java版本或使用的操作系统造成的。

在您引用的答案中,David有一条有用的评论:

如果您创建清单。MF文件,不要忘记用换行符结束最后一行。在Windows上,只需在末尾添加一个空行。否则最后一个属性将不会出现在jar文件中。在这种特殊情况下,主类属性将丢失。

也许,这就是你的情况。因为当我删除清单中的最后一个换行符时。MF,我收到的错误与您的相同:

在示例中,没有主清单属性。罐子

清单的示例。MF最后一个换行符(第三行为空)-工作正常

Manifest-Version: 1.0
Main-Class: JarExample

没有最后一个换行符(2行代码)-因错误而崩溃

Manifest-Version: 1.0
Main-Class: JarExample
 类似资料:
  • 问题内容: 我正在尝试从.jar文件中提取文件。我该如何使用命令行? 我正在运行Windows 7 问题答案: 从文档: 要从jar文件中提取文件,请使用,如下所示: 要仅从jar文件中提取某些文件,请提供其文件名: 该文件夹可能不适合您,在我的Windows分区上是: 除非的位置在您的路径环境变量中,否则您必须指定完整路径/从文件夹内部运行程序。 编辑: 这是另一篇文章,专门针对提取JAR:ht

  • 我正在尝试使用Jcraft-Jsch库通过Java应用程序管理路由器。 我正试图通过TFTP服务器发送路由器配置。问题出在我的Java代码中,因为这适用于PuTTY。 这是我的Java代码: 我明白了 行的自动命令“192.168.50.1”无效 问题是如何运行这些连续的命令。

  • 问题内容: 我正在创建一个Python脚本,在其中执行UNIX系统命令。我有一个名为Binaries.war的战争档案,它位于名为Portal.ear的耳朵档案中 Portal耳朵文件位于/ home / foo / bar / 将Binaries.war文件从/home/foo/bar/Portal.ear存档中解压缩到运行脚本的当前目录中。 如何仅使用一个命令指定要提取到的目标目录?我想做这样

  • 问题内容: 因此,我试图制作一个bash脚本,该脚本调用此命令,然后将其输入。它调用此命令,此命令之后需要3-4个输入。我键入命令,它等待我输入名字,一个我输入名字,它等待我输入名字,依此类推。如何使用bash脚本一次将这些参数传递给命令? 问题答案: 几种方法。 分组所有echo命令并将它们通过管道传递给命令: 或使用heredoc:

  • 问题内容: 我正在创建一个Python脚本,在其中执行UNIX系统命令。我有一个名为Binaries.war的战争档案,它位于名为Portal.ear的耳朵档案中 Portal耳朵文件位于/ home / foo / bar / 将Binaries.war文件从/home/foo/bar/Portal.ear存档中解压缩到运行脚本的当前目录中。 如何仅使用一个命令指定要提取到的目标目录?我想做这样

  • 我正在尝试在Windows 10 Home(64位)中安装Java。就像许多教程指出的那样,我下载了Javajdk安装文件,执行了它,安装后更改了环境变量中的路径。但是由于某种原因,当我执行命令“javac”时,它会在命令提示符中返回非内部/外部命令错误,但在Powershell中运行绝对正常。我试图通过卸载Java并非常小心地重新安装它来纠正这一点,遵循所有步骤,但这仍然继续发生。 此外,在安装