我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
当前回答
我在使用IntelliJ IDEA创建一个罐子时遇到了这个问题。请看这个讨论。
解决这个问题的方法是重新创建jar工件,选择jar > From依赖模块,但不接受META-INF/MANIFEST.MF的默认目录。将-/src/main/java改为-/src/main/resources。
否则,它会在jar中包含一个清单文件,而不是- src/main/java中应该包含的清单文件。
其他回答
找到了一个很好的解决方案,在任何这种情况下都会有所帮助,因为你只需要一个可运行的罐子,这是你在大多数情况下所做的。 如果您的应用程序在Intellij Idea中运行,请遵循以下步骤: 1)进入模块设置和工件,并添加一个jar和定义主类 2)然后在菜单中选择Build,点击“Build artifact”,你就会得到这个罐子。
即使我更改了源文件夹并使用scala而不是java,这种方法仍然有效。
我刚才得到了同样的错误。 如果你正在使用gradle,只需在你的gradle.build中添加下一个:
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'com.company.project.MainClass'
}
}
其中com.company.project.MainClass使用公共静态void main(String[] args)方法的类的路径。
大多数的解决方案对我来说都不奏效,但我的教练帮助了我 我想在这里分享他的解决方案 我使用kali Linux终端,但应该在所有debian都很好
javac *.java
nano MANIFEST.MF
在文件类型中
主类:主要 或者不管你的主文件名是什么(如果存在包名,请确保添加包名)
jar -cvmf MANIFEST.MF new.jar *.class
现在运行文件use
java -jar new.jar
或者你可以去文件的属性中检查
允许文件作为程序执行 双击它
这对我有帮助,而上面的大多数答案都没有
对于maven,这就是解决它的方法(对我来说,对于GitHub上的vetle代码库):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.lazydevs.veetle.api.VeetleAPI</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
欢呼声……
在您的本地.m2目录中检查该工件的子目录。 如果存在-删除它,并再次执行Maven更新