1、问题描述

通过maven构建了jar文件,如图所示
在这里插入图片描述

2、命令窗口运行jar,提示“没有主清单属性”

在这里插入图片描述

2.1 分析问题

在打包构建的jar目录内,可以看到有一个MANIFEST.MF文件,如图所示:
在这里插入图片描述
该文件就是jar运行时要查找的清单目录,其中主清单数据,就是我们要运行的主类(函数入口main所在的类);
提示缺少主清单属性,就是文件中少了主清单属性如下所示:
在这里插入图片描述
正常情况下,该清单文件内会有一个:

Main-Class:org.example.xxx.APP

属性,他就是我们程序运行的入口(main函数所在的类路径)

2.2 解决问题

通过压缩工具解压我们的jar包,找到清单目录文件,编辑MANIFEST.MF文件:

Manifest-Version: 1.0
Built-By: xiayutian
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_191
Main-Class: org.example.Platform  # 添加上我们的主类路径

将MANIFEST.MF重新替换掉jar包内的文件,问题解决;

3 、成功运行

win+r 命令窗口

 java -jar .\hive-ddl2sql.jar

程序正常运行
在这里插入图片描述

4. 打包时指定mainclass

要创建一个可执行的JAR,只需要设置主类作为应用程序的入口点
在maven工程中,pom.xml添加一下插件片段,用来设置主类。
https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html链接

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>org.sonatype.haven.HavenCli</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐