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

Java -jar "app.jar"

我得到了以下信息:

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

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


当前回答

我找到了一个新的解决方案,坏manifest生成!

用WinRAR这样的zip编辑器打开jar文件 点击META-INF 添加或编辑 添加: 创建一个名为MANIFEST的文本文件。MF在一个名为META-INF的文件夹中 并添加以下一行: Manifest-Version: 1.0 主类:package.ex.com.views.mainClassName 保存文件并将其添加到zip文件中 编辑: 拖出文件修改MANIFEST。MF添加前一行 打开cmd,输入:java -jar c:/path/JarName.jar

现在应该可以正常工作了!

其他回答

任何可执行的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文件,检查你在哪里保存它!

如果使用Maven,请在pom中包含以下内容

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

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

以上答案对我来说只是部分帮助。java -cp是答案的一部分,但我需要关于如何识别要运行的类的更具体的信息。以下是对我有效的方法:

步骤1:找到我需要运行的类

jar tf /path/to/myjar.jar | more

结果最上面的几行是:

META-INF/
META-INF/MANIFEST.MF
somepath/
somepath/App.class
META-INF/maven/
...

App.class包含了要运行的主类。我不能百分之百确定你是否总是认为你需要的课程是第一个,但它是为我。如果不是,我想使用grep排除与库相关的结果以将类列表缩减到可管理的大小并不太难。

接下来就很简单了:我只需要使用该路径(减去“.class”后缀):

java -cp /path/to/myjar.jar somepath/App

试试这个命令来包含jar:

java -cp yourJarName.jar your.package..your.MainClass

这是因为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.