一、普通的Java项目打包
1.使用IDEA创建一个Java项目
TestMain.java:
import javax.swing.*;
import java.awt.*;
/**
* @Author : xj
* @Date : 2022/5/30 8:54
* @Description :普通Java项目——Jar包测试
*/
public class TestMain {
//定义一个CreateJFrame方法
public void CreateJFrame(String title){
//创建一个JFrame对象
JFrame jFrame = new JFrame(title);
//获取一个容器
Container container = jFrame.getContentPane();
//创建一个JLabel标签
JLabel jl = new JLabel("这是一个JFrame窗体");
//使标签上的文字居中
jl.setHorizontalAlignment(SwingConstants.CENTER);
//将标签添加到容器中
container.add(jl);
//设置容器的背景颜色
container.setBackground(Color.gray);
//设置JFrame可见
jFrame.setVisible(true);
//设置JFrame大小
jFrame.setSize(500,500);
//设置JFrame的显示位置
jFrame.setLocation(600,300);
//设置窗口关闭方式
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestMain().CreateJFrame("普通Java项目——Jar包测试");
System.out.println("普通Java项目——Jar包大功告成!");
}
}
2.使用IDEA将Java项目打成JAR文件
如果对文件做了修改,要重新打包,只需要rebuild即可:
3.运行Jar文件
(1)方法一:双击Jar文件直接运行
(2)方法二:在DOS中使用Java指令运行
4.MANIFEST.MF文件说明
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容:
Manifest-Version: 1.0
Created-By: Apache Ant 1.5.1
Extension-Name: Struts Framework
Specification-Title: Struts Framework
Specification-Vendor: Apache Software Foundation
Specification-Version: 1.1
Implementation-Title: Struts Framework
Implementation-Vendor: Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.1
Class-Path: commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar struts-legacy.jar
注意:MANIFEST 文件末尾必须要有一个空行,而且每行的冒号后面必须要有一个空格。
如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:
(1)一般属性
1> Manifest-Version
用来定义manifest文件的版本,例如:Manifest-Version: 1.0
2> Created-By
声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:
Created-By: Apache Ant 1.5.1
3> Signature-Version
定义jar文件的签名版本
4> Class-Path
应用程序或者类装载器使用该值来构建内部的类搜索路径
(2)应用程序相关属性
1> Main-Class
定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。
二、Maven项目打包
1.使用IDEA创建一个Maven项目
创建Maven项目参考我的另一篇文章:
IDEA创建一个maven项目_人……杰的博客-CSDN博客_idea新建一个maven项目
创建的结果如下:
2.使用IDEA将Maven项目打成JAR文件
(1).在pom.xml中添加Maven对应的打Jar包插件信息
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xj</groupId>
<artifactId>MavenProJarTest</artifactId>
<version>1.0-SNAPSHOT</version>
<!--build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<!--编译源文件和测试源文件-->
<artifactId>maven-compiler-plugin</artifactId>
<!--该插件所需要的特殊配置-->
<configuration>
<!--源代码使用的JDK版本-->
<source>1.8</source>
<!--需要生成的目标class文件的编译版本-->
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<!--创建Jar文件-->
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- 生成MANIFEST.MF的设置 -->
<manifest>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<addClasspath>true</addClasspath>
<!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库
下面可能会有多个包,并且只有一个是正确的,其余的可能是带时间戳的,
此时会在classpath下面把那个带时间戳的给添加上去,
然后我们 在依赖打包的时候,打的是正确的,所以两头会对不上,报错。 -->
<useUniqueVersions>false</useUniqueVersions>
<!-- 这个jar所依赖的jar包添加classPath的时候的前缀,如果这个jar本身和依赖包在同一级目录,则不需要添加 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- jar启动入口类 -->
<mainClass>TestMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
其中<build>......</build>之间的信息就是打Jar的配置信息。
maven打包插件需要说明的地方:
需要说明的是,如果一个maven项目中有多个子目录,每一个子目录中的pom.xml对应一个项目,它的作用范围只有这一个子目录下的。比如扫描配置文件,如果要让一个子目录下的pom.xml扫描另一个子目录下的配置文件,那是做不到的。在打jar包的时候,只运行当前的pom.xml文件。当然也有其他的打包方法,比如使用spring-boot-maven-plugin插件在打Jar包时,会引入依赖包。
(2).使用IDEA打成Jar文件
3.运行Jar文件
(1)方法一:双击Jar文件直接运行
(2)方法二:在DOS中使用Java指令运行
三、Spring Boot项目打包
1.使用IDEA创建一个Spring Boot项目
创建Spring Boot项目参考我的另一篇文章:
Spring Boot之创建一个Spring Boot项目(一)_人……杰的博客-CSDN博客
创建的结果如下:
SpringBootMain.java:
package com.xj.main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author : xjfu
* @Date : 2022/6/20 9:04
* @Description :Spring Boot 启动类
*/
@SpringBootApplication
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class, args);
}
}
HelloController.java:
package com.xj.main.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author : xjfu
* @Date : 2022/6/20 9:07
* @Description : Controller类
*/
@Controller
public class HelloController {
@ResponseBody
@RequestMapping(value = "/hello")
public String sayHello(){
return "Hello ! Spring Boot Project Jar Test!";
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xj</groupId>
<artifactId>spring_boot_jar_test</artifactId>
<version>1.0-SNAPSHOT</version>
<!--Spring Boot所需Jar包-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.运行程序
3.配置打包信息
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xj</groupId>
<artifactId>spring_boot_jar_test</artifactId>
<version>1.0-SNAPSHOT</version>
<!--Spring Boot所需Jar包-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--build标签描述了如何来编译及打包项目,而具体的编译和打包工作是通过build中配置的 plugin 来完成-->
<build>
<plugins>
<!--使用SpringBoot的打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4.打包并运行程序
运行方法1——双击打包文件运行程序:
注意启动后要关闭,不然就会一直占用着“8080”端口:
运行方法2——java -jar 命令运行:
四、参考
1.jar包的几种制作方式_一个努力的菜鸟的博客-CSDN博客_怎么制作jar包
2.Java 制作 jar 包的基本流程_GGN_2015的博客-CSDN博客_如何开发jar包
3.MANIFEST.MF文件详解 - DavidGandy - 博客园
4.java打jar包的几种方式详解 - jack_Meng - 博客园
5.Maven build之pom.xml文件中的Build配置_u010010606的博客-CSDN博客_<build>