我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:

Java -jar "app.jar"

我得到了以下信息:

在“app.jar”中没有主清单属性

通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。


当前回答

我和你有相似的问题, 在下面的语法中成功创建。war文件:-

Jar {cvf} [Jar -file] [manifest-file]

清单 当创建(c)或更新(u) JAR文件时,manifest操作数用要包含在manifest中的属性的名称和值定义先前存在的清单文件。MF在JAR文件中。如果f选项'[1]'存在,则必须指定清单操作数。

为了创建清单文件,你需要为某些属性定义一个值,你可以在(.WAR)文件名后面加上星号,以避免创建清单文件:-

罐子 -cvf foo.war *

老实说,我不知道这是否是一个最好的做法,但它为我工作:)。

其他回答

在我的案例中,问题是<build>下的<pluginManagement>使事情不能正常工作。

我原来的pom.xml:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        ...
        ...
        ...
  </pluginManagement>
</build>

删除<pluginManagement>后,错误就消失了。

任何可执行的jar文件都应该通过点击或使用命令提示符运行,如java -jar app.jar(使用“如果jar路径包含空格”-即java -jar“C:\文件夹名称\app.jar”)。如果您的可执行jar没有运行,这意味着它没有正确创建。

为了更好地理解,提取jar文件(或使用任何工具查看,对于windows 7-Zip是一个很好的工具),并检查/META-INF/MANIFEST.MF下的文件。如果你找到任何条目

Main-Class: your.package.name.ClaaswithMain -那么它就可以了,否则你必须提供它。

注意在MANIFEST上附加Main-Class条目。MF文件,检查你在哪里保存它!

这是因为Java无法在MANIFEST中找到Main属性。MF文件。 Main属性对于告诉java应该使用哪个类作为应用程序的入口点是必要的。在jar文件中,是MANIFEST。MF文件位于META-INF文件夹中。想知道如何查看jar文件中的内容吗?用WinRAR打开jar文件。

MANIFEST中的主属性。MF是这样的:

Main-Class: <packagename>.<classname>

当manifest中缺少这一行时,您会得到这个“no main manifest attribute”错误。MF文件。

在MANIFEST中指定这个属性真的很麻烦。MF文件。

更新:我刚刚找到了一种非常简洁的方法来在eclipse中指定应用程序的入口点。 当你说导出时,

Select Jar and next 

[ give it a name in the next window ] and next

and next again

and you'll see " Select the class of the application entry point".

Just pick a class and Eclipse will automatically build a cool MANIFEST.MF for you.

你可能和我有同样的问题。创建。jar文件后,编写jar xf app.jar META-INF/MANIFEST.MF。这将创建文件的副本到当前目录,以便读取它。如果它只是说:

Manifest-Version: 1.0 创建对象:Oracle Corporation (Oracle Corporation)

并且不包含“Main-Class”声明,那么我认为你找到了你的问题。

但我不知道如何解决这个问题。我在StackOverflow上查询了其他有相同/类似问题的人,但找不到答案。然而,有了这些信息,你可能会得到更好的帮助(考虑到你和我有同样的问题)。

编辑:我尝试了一个清单文件,但没有让它工作,但我的错误是在创建jar文件时只命名了一个类。我写了*.class,现在可以工作了。

虽然我不知道为什么需要创建一个清单文件。但我想只要管用就好。

如果jar不遵守规则,它就不是一个可执行的jar。