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

Java -jar "app.jar"

我得到了以下信息:

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

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


当前回答

你可以简单地遵循这一步 创建一个jar文件

 jar -cfm jarfile-name manifest-filename Class-file name

在运行jar文件时,像这样简单地运行

 java -cp jarfile-name main-classname

其他回答

任何可执行的jar文件都应该通过点击或使用命令提示符运行,如java -jar app.jar(使用“如果jar路径包含空格”-即java -jar“C:\文件夹名称\app.jar”)。如果您的可执行jar没有运行,这意味着它没有正确创建。

为了更好地理解,提取jar文件(或使用任何工具查看,对于windows 7-Zip是一个很好的工具),并检查/META-INF/MANIFEST.MF下的文件。如果你找到任何条目

Main-Class: your.package.name.ClaaswithMain -那么它就可以了,否则你必须提供它。

注意在MANIFEST上附加Main-Class条目。MF文件,检查你在哪里保存它!

我个人认为这里所有的答案都是对问题的误解。这个问题的答案在于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来执行?

我也有同样的问题。通过添加以下行到pom文件使其工作。该插件将确保应用程序的构建过程中所有必要的步骤。

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

MAVEN的问题在于它试图包括第一个MANIFEST。MF文件从第一个库从依赖而不是我们自己的清单。Mf当你使用神器的时候!

将jar.jar重命名为jar.zip 打开清单。MF文件从META-INF\MANIFEST。曼氏金融 复制真实的清单。MAVEN已经在你的项目中生成了MF 其中包括: Manifest-Version: 1.0 主类:yourpacket。你的主类(例如info.data.MainClass) 替换MANIFEST的内容。你罐子里的MF。 将jar.zip重命名为jar.jar。 现在java -jar yourjar.jar工作得很完美。

OR!

简单地创建您自己的MANIFEST。MF和:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifestFile> Your path like: src/main/resources/META-INF/MANIFEST.MF </manifestFile>
            <index>true</index>
                <manifest>
                    <addClasspath>true</addClasspath>
                </manifest>
        </archive>
    </configuration>
</plugin>

但是如果您使用maven面板(或maven命令行),您可以强制它生成自己的清单并将其包含到JAR文件中。

将以下代码添加到you pom.xml的构建部分: <插件> <插件> < groupId > org.apache.maven.plugins < / groupId > < artifactId > maven-assembly-plugin < / artifactId > <版本> 3.2.0 > < /版本 执行< > 执行< > <阶段>包> < /阶段 <目标> <目标>单> < /目标 > < /目标 执行< / > > < /执行 < >配置 < descriptorRefs > < descriptorRef > jar-with-dependencies < / descriptorRef > < / descriptorRefs > <文件> 真正<指数> < /指数> <清单> 真正< addClasspath > < / addClasspath > < mainClass > yourpacket。yourmainclass(例如info.data.MainClass)</mainClass> . /mainClass < /清单> < manifestEntries > < >发展模式> < /模式 < url > $ {project.url} < / url > < / manifestEntries > < / >存档 < /配置> < /插件> 打开MAVEN面板(在Intellij中)并执行“Install”。它将生成MANIFEST文件,并将包含所有依赖项的JAR文件属性编译到“Target”文件夹中。它还将被安装到本地maven存储库中。

或者,你也可以使用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文件名。