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

Java -jar "app.jar"

我得到了以下信息:

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

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


当前回答

大多数的解决方案对我来说都不奏效,但我的教练帮助了我 我想在这里分享他的解决方案 我使用kali Linux终端,但应该在所有debian都很好

javac *.java
nano MANIFEST.MF

在文件类型中

主类:主要 或者不管你的主文件名是什么(如果存在包名,请确保添加包名)

jar -cvmf MANIFEST.MF new.jar *.class

现在运行文件use

java -jar new.jar

或者你可以去文件的属性中检查

允许文件作为程序执行 双击它

这对我有帮助,而上面的大多数答案都没有

其他回答

试试这个命令来包含jar:

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

在您的本地.m2目录中检查该工件的子目录。 如果存在-删除它,并再次执行Maven更新

在我的案例中,问题是<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文件,检查你在哪里保存它!

我刚才得到了同样的错误。 如果你正在使用gradle,只需在你的gradle.build中添加下一个:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.company.project.MainClass'
    }
}

其中com.company.project.MainClass使用公共静态void main(String[] args)方法的类的路径。