我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
当前回答
我今天也遇到了同样的问题。我的问题解决了,我移动META-INF到资源文件夹。
其他回答
您可能没有正确地创建jar文件:
例如:在创建jar时缺少选项m
以下工作:
jar -cvfm MyJar.jar Manifest.txt *.class
或者,你也可以使用maven-assembly-plugin,如下面的例子所示:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.package.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
在这个例子中,节中指定的所有依赖jar都将自动包含在您的单个jar中。注意,jar-with-dependencies应该按字面意思写为,而不是替换为您想要包含的jar文件名。
我个人认为这里所有的答案都是对问题的误解。这个问题的答案在于spring-boot构建.jar的方式不同。每个人都知道Spring Boot设置了一个这样的清单,这与每个人都认为这是一个标准的.jar启动不同,这可能是也可能不是:
Start-Class: com.myco.eventlogging.MyService
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Main-Class: org.springframework.boot.loader.JarLauncher
也许它需要在类路径上使用org.springframework.boot.loader.JarLauncher来执行?
大多数的解决方案对我来说都不奏效,但我的教练帮助了我 我想在这里分享他的解决方案 我使用kali Linux终端,但应该在所有debian都很好
javac *.java
nano MANIFEST.MF
在文件类型中
主类:主要 或者不管你的主文件名是什么(如果存在包名,请确保添加包名)
jar -cvmf MANIFEST.MF new.jar *.class
现在运行文件use
java -jar new.jar
或者你可以去文件的属性中检查
允许文件作为程序执行 双击它
这对我有帮助,而上面的大多数答案都没有
我今天也遇到了同样的问题。我的问题解决了,我移动META-INF到资源文件夹。