qidao123.com技术社区-IT企服评测·应用市场

标题: 办理no main manifest attribute错误 [打印本页]

作者: 干翻全岛蛙蛙    时间: 2024-8-11 13:25
标题: 办理no main manifest attribute错误
0. 背景

在开辟Spring boot项目的时候,偶然候会必要使用java -jar test-1.0-SNAPSHOT.jar指令来运行开辟的java应用,但是很不幸,会遇到如许的错误
  1. no main manifest attribute, in test-1.0-SNAPSHOT.jar
复制代码
为什么会产生如许的错误呢?怎样办理呢?
1. java程序怎样运行

在打仗java开辟的第一天,我们就知道,在编写完Java程序之后
  1. public class Hello {
  2.     public static void main(String[] args) {
  3.         System.out.println("Hello World");
  4.     }
  5. }
复制代码
必要使用指令将.java文件编译成class文件
  1. javac Hello.java
复制代码
然后就可以使用命令就可以实验这个Java程序
  1. java Hello                          
  2. Hello World         
复制代码
程序运行的入口是main方法,当我们使用java Hello命令,假造机就可以根据Hello.class文件中的main方法,来运行程序。但是使用的 java -jar 指令是怎样使程序运行起来的呢?
2. jar是什么

JAR(Java Archive)文件是一种打包文件格式,它允许你将多个 Java 类文件、相关的元数据和资源(如文本、图片等)打包到一个单一的文件中,以便于分发和部署。
JAR中包含了类文件,元数据和资源。类文件和资源文件很清楚,那元数据是什么呢?
元数据重要指的是清单文件(MANIFEST.MF) ,这是一个可选文件,用来提供关于jar文件的额外信息。清单文件的重要功能:

这里可以解压一个jar来看一下:
这里解压一下spring-core-5.3.27.jar来看一下,jar中有什么内容:

这里可以看到,org目次下,放的就是类文件,META-INF放的就是资源文件:

这里再看一下MANIFEST. MF里的内容
  1. Manifest-Version: 1.0
  2. Implementation-Title: spring-core
  3. Automatic-Module-Name: spring.core
  4. Implementation-Version: 5.3.27
  5. Created-By: 1.8.0_345 (Oracle Corporation)
  6. Dependencies: jdk.unsupported
复制代码
Manifest-Version 体现清单文件的版本。
Created-By 体现创建JAR文件的Java版本和提供者。
Permissions 指定了JAR文件的权限。
这个文件中没有包含指定main的方法,一般如许添加:
  1. Main-Class: com.example.MainApp
复制代码
3. java -jar test-1.0-SNAPSHOT.jar:

如许已经可以知道,java -jar就是去找指定jar包里的main方法来实验,怎样找main方法?根据MANIFEST.MF中的Main-Class类来找。
遇到的错误是没有no main manifest attribute,那就打开看一下。
  1. Manifest-Version: 1.0  
  2. Implementation-Title: test  
  3. Implementation-Version: 1.0-SNAPSHOT  
  4. Build-Jdk-Spec: 1.8  
  5. Created-By: Maven JAR Plugin 3.2.2  
复制代码
这里没有这个main attribute,那怎样添加这个attribute呢?
以上面的Hello.java为例,来手动打一个jar包。先编写这个MANIFEST. MF
  1. Manifest-Version: 1.0     
  2. Build-Jdk-Spec: 1.8     
  3. Main-Class: Hello  
复制代码
如许再使用这个文件打一个jar包:
  1. jar cvfm test-hello.jar MANIFEST.MF .  
复制代码
这里的参数作用是

这个时候就可以使用java -jar愉快的玩耍了。
那上面Springboot程序怎样添加这个程序实验入口呢?
4. 添加实验入口

这里的程序打包是使用的maven,那就使用maven的插件来完成就好了!
在pom文件中添加如下插件:
  1. <build>
  2.     <plugins>
  3.       <plugin>
  4.         <groupId>org.springframework.boot</groupId>
  5.         <artifactId>spring-boot-maven-plugin</artifactId>
  6.         <executions>
  7.           <execution>
  8.             <goals>
  9.               <goal>repackage</goal>
  10.             </goals>
  11.           </execution>
  12.         </executions>
  13.       </plugin>
  14.     </plugins>
  15.   </build>
复制代码
这个时候,再使用mvn package指令,就可以得到一个可以正确实验的jar包了。直接java -jar test-1.0-SNAPSHOT.jar愉快玩耍。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4