我已经安装了一个应用程序,当我试图运行它(它是一个可执行的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更新