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

Java -jar "app.jar"

我得到了以下信息:

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

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


当前回答

我遇到了这个问题,我最近在Netbeans 8中解决了这个问题(参考下图):

转到项目的属性。 点击Run。 使用浏览指定项目的主类。 构建并运行Jar文件。

其他回答

我在执行mvn包时得到相同的错误。这就是我解决问题的方法。

我用的是maven-multi模块。我正面临这个问题,因为我错误地在parent pom中添加了下面的部分。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

然后在子模块中添加这个pom.xml并从父pom中删除后解决了我的问题。

我也有同样的问题。这里提到的许多解决方案并没有提供完整的内容,因此我将尝试向您概述如何从命令行打包jar文件。

如果您想在包中包含.class文件,请将包添加在.java. xml文件的开头。 Test.java 包testpackage; 公共类测验 { ... } 使用包名给出的结构来编译你的.class文件的代码: Javac -d。Test.java d。使编译器创建所需的目录结构。 在打包.jar文件时,您需要指示jar例程如何打包它。这里我们使用选项集cvfeP。这是为了保持包结构(选项P),指定入口点,以便清单文件包含有意义的信息(选项e)。选项f允许您指定文件名,选项c创建一个存档,选项v将输出设置为详细。这里需要注意的重要事项是P和e。 然后是我们想要的jar的名称test.jar。 然后是入口点。 然后是-C。<packagename>/从该文件夹中获取类文件,并保留文件夹结构。 jar cvfeP test.jar testpackage. jar测试-C。testpackage / 检查压缩程序中的.jar文件。它应该具有以下结构 test.jar meta - inf |清单。曼氏金融 testpackage | Test.class 清单。MF应该包含以下内容 Manifest-Version: 1.0 创建对象:JDK版本> (Oracle Corporation) 主类:testpackage。测试 如果你手动编辑你的清单,一定要保持换行符在最后,否则java不会识别它。 执行你的.jar文件 Java -jar test.jar

我试过了,对我很有效。 MVN清洁安装包应该工作。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
            </executions>
        </plugin>
    </plugins>
</build>

如果jar不遵守规则,它就不是一个可执行的jar。

以我为例——我从事的是一个多模块项目——我可以用以下方式介绍这个问题:

我将其添加到父文件pom.xml中,这导致了问题。即,值为true的skip:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!--
                besides hindering the packaging, this also skips running the app after build when calling spring-boot:run. You have to enable it in the
                corresponding module by setting skip to false, there.
                -->
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

我修复了这个问题,通过添加相同的配置到模块,我想打包成一个jar,但改变了跳过的值为false:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot.version}</version>
    <configuration>
        <mainClass>${project.mainClass}</mainClass>
        <layout>ZIP</layout>
        <skip>false</skip>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
        <execution>
            <id>build-info</id>
            <goals>
                <goal>build-info</goal>
            </goals>
        </execution>
    </executions>
</plugin>