我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
当前回答
检查你的jar文件MANIFEST。MF Main-Class是否可用
first.java
class first
{
public static void main (String arg[ ])
{
System.out.println("Welcome to the world of Java");
}
}
之前:
Manifest-Version: 1.0
Created-By: 1.7.0_80 (Oracle Corporation)
sony@sony-VPCEH25EN:~/Documents$ java -jar first.jar
no main manifest attribute, in first.jar
后:
Manifest-Version: 1.0
Created-By: 1.7.0_80 (Oracle Corporation)
Main-Class: first
sony@sony-VPCEH25EN:~/Documents$ java -jar first.jar
Welcome to the world of Java
其他回答
我也遇到过同样的问题,现在已经解决了:) 只要遵循以下步骤,错误可能是任何东西,但下面的步骤使过程更顺畅。我花了很多时间来寻找解决办法。
1.尝试重新启动Eclipse(如果您正在使用Eclipse构建JAR文件) ——>实际上,这有助于我的问题,导出JAR文件正确。
2.eclipse重新启动后,尝试查看eclipse是否能够通过Java项目识别主类/方法——>右键单击——>运行为——>运行配置——> main——>单击搜索按钮,查看eclipse是否能够在JAR文件中查找主类。 这是为了验证JAR文件将拥有主类的入口点。
在此之后,将您的Java动态项目导出为“可运行的JAR”文件而不是JAR文件。 在Java启动配置中,选择您的主类。 导出jar文件后,使用下面的命令执行。 java -cp[你的JAR]. JAR[完整的包]。MainClass 例如:java -cp AppleTCRuleAudit.jar com.apple.tcruleaudit.classes.TCRuleAudit .jar 您可能会遇到不支持的java版本错误。修复方法是更改shell bash概要文件中的java_home,使之与用于在eclipse中编译项目的Java版本相匹配。
希望这能有所帮助!如果您还有什么问题,请告诉我。
您可能没有正确地创建jar文件:
例如:在创建jar时缺少选项m
以下工作:
jar -cvfm MyJar.jar Manifest.txt *.class
我在执行mvn包时得到相同的错误。这就是我解决问题的方法。
我用的是maven-multi模块。我正面临这个问题,因为我错误地在parent pom中添加了下面的部分。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
然后在子模块中添加这个pom.xml并从父pom中删除后解决了我的问题。
我只想明确一点
Main-Class: <packagename>.<classname>
如果你没有包,你必须忽略这部分,就像这样:
Main-Class: <classname>
以上答案对我来说只是部分帮助。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