吉林省城乡建设厅网站,滨湖区知名做网站价格,怎样做网站后台优化,wordpress登陆页面更改文章目录 0. 背景1. java程序如何运行2. jar是什么3. java -jar test-1.0-SNAPSHOT.jar#xff1a;4. 添加执行入口 0. 背景
在开发Spring boot项目的时候#xff0c;有时候会需要使用java -jar test-1.0-SNAPSHOT.jar指令来运行开发的java应用#xff0c;但是很不幸#… 文章目录 0. 背景1. java程序如何运行2. jar是什么3. java -jar test-1.0-SNAPSHOT.jar4. 添加执行入口 0. 背景
在开发Spring boot项目的时候有时候会需要使用java -jar test-1.0-SNAPSHOT.jar指令来运行开发的java应用但是很不幸会遇到这样的错误
no main manifest attribute, in test-1.0-SNAPSHOT.jar为什么会产生这样的错误呢如何解决呢
1. java程序如何运行
在接触java开发的第一天我们就知道在编写完Java程序之后
public class Hello { public static void main(String[] args) { System.out.println(Hello World); }
}需要使用指令将.java文件编译成class文件
javac Hello.java然后就可以使用命令就可以执行这个Java程序
java Hello
Hello World 程序运行的入口是main方法当我们使用java Hello命令虚拟机就可以根据Hello.class文件中的main方法来运行程序。但是使用的 java -jar 指令是如何使程序运行起来的呢
2. jar是什么
JARJava Archive文件是一种打包文件格式它允许你将多个 Java 类文件、相关的元数据和资源如文本、图片等打包到一个单一的文件中以便于分发和部署。
JAR中包含了类文件元数据和资源。类文件和资源文件很清楚那元数据是什么呢 元数据主要指的是清单文件(MANIFEST.MF) 这是一个可选文件用来提供关于jar文件的额外信息。清单文件的主要功能 指定主类在清单文件中可以指定包含main方法的类这是Java应用程序的入口点。这允许用户通过java -jar命令直接运行JAR文件。 定义属性清单文件可以包含属性这些属性可以是键值对的形式用于存储关于JAR文件的额外信息比如版本号、作者信息等。 指定类路径在清单文件中可以定义类路径Class-Path属性指定在运行JAR文件时需要包含的其他JAR文件或目录。 安全设置清单文件可以包含安全相关的设置比如指定需要哪些权限。 扩展名映射可以定义文件扩展名到类名的映射这样当运行具有特定扩展名的文件时JAR文件中的特定类将被用来处理这些文件。 其他自定义信息开发者可以根据需要在清单文件中添加自定义的元数据。
这里可以解压一个jar来看一下 这里解压一下spring-core-5.3.27.jar来看一下jar中有什么内容
这里可以看到org目录下放的就是类文件META-INF放的就是资源文件 这里再看一下MANIFEST. MF里的内容
Manifest-Version: 1.0
Implementation-Title: spring-core
Automatic-Module-Name: spring.core
Implementation-Version: 5.3.27
Created-By: 1.8.0_345 (Oracle Corporation)
Dependencies: jdk.unsupportedManifest-Version 表示清单文件的版本。 Created-By 表示创建JAR文件的Java版本和提供者。 Permissions 指定了JAR文件的权限。
这个文件中没有包含指定main的方法一般这样添加
Main-Class: com.example.MainApp3. java -jar test-1.0-SNAPSHOT.jar
这样已经可以知道java -jar就是去找指定jar包里的main方法来执行如何找main方法根据MANIFEST.MF中的Main-Class类来找。
遇到的错误是没有no main manifest attribute那就打开看一下。
Manifest-Version: 1.0
Implementation-Title: test
Implementation-Version: 1.0-SNAPSHOT
Build-Jdk-Spec: 1.8
Created-By: Maven JAR Plugin 3.2.2 这里没有这个main attribute那如何添加这个attribute呢 以上面的Hello.java为例来手动打一个jar包。先编写这个MANIFEST. MF
Manifest-Version: 1.0
Build-Jdk-Spec: 1.8
Main-Class: Hello 这样再使用这个文件打一个jar包
jar cvfm test-hello.jar MANIFEST.MF . 这里的参数作用是
c创建新的 JAR 文件。v在打包过程中显示详细输出。f后面跟着的是要创建的 JAR 文件的名称。m指定清单文件的名称。
这个时候就可以使用java -jar愉快的玩耍了。 那上面Springboot程序如何添加这个程序执行入口呢
4. 添加执行入口
这里的程序打包是使用的maven那就使用maven的插件来完成就好了 在pom文件中添加如下插件
build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactIdexecutions execution goals goalrepackage/goal /goals /execution /executions /plugin /plugins /build 这个时候再使用mvn package指令就可以得到一个可以正确执行的jar包了。直接java -jar test-1.0-SNAPSHOT.jar愉快玩耍。