课时103:生成jar文件

简介: 本文介绍了Java中生成和使用JAR文件的基本概念与操作。JAR文件用于将多个类文件打包成一个压缩文件,便于管理和分发。通过JDK提供的`jar`命令可以创建JAR文件,并可通过设置CLASSPATH环境变量来配置和使用这些文件。文中还演示了如何定义、编译和打包一个简单的Java程序为JAR文件,并详细解释了JAR文件的结构及配置方法。此外,简要提及了JDK 1.9后引入的模块化系统对JAR文件的影响。

课时103:生成jar文件

摘要:

1. 生成 Jar 文件的概念

2.  Jar 打包操作

 

01.  JAR文件的概念

 

当一个项目开发完成之后,通常会生成大量的 .class 文件。为了方便管理这些文件,可以采用压缩的形式进行处理。通常会将相关的类文件分组打包,例如将 A 组的类文件打包成一个包, B 组的类文件打包成另一个包。在 Java 中,这种打包后的文件称为 JAR 文件。如果希望将程序打包为 Jar 文件,可以直接使用JDK中提供的 Jar 命令。

 

在早期的 JDK 版本中,可以通过直接输入jar命令来查看其使用方法。然而,从 JDK 1.9 开始,为了统一命令格式,需要使用“help ” 来查看相关说明。

 

运行结果如下图:

注:现在只需要执行就可以获得相关命令

image.png

 

02. 打包操作

 

下面通过程序的具体演示来实现 Jar 的使用与配置的操作

 

2.1定义一个程序类,这个类的代码如下(简单代码):


恢复 Message 的代码:

package cn.mldn.util;
public class Massage {
    public String getContent(){
        return "www.mldn.cn";
    }
}

 

2.2对程序进行编译与打包处理:


对程序进行打包编译:javac -d.Message.java;

此时会形成 cn 的包,包里面有相应的子包与 *.class 文件,将其打包为 mldn.jar ; 代码为 jar -cvf mldn.jar cn;

--c:创建一个新的 Jar 文件

--v:得到一个详细输出

--f:设置要生成的 Jar 文件名称,本出定义的是“ mldn.jar

通过以上操作,即可完成 Jar 文件的打包处理。

 

image.png

 

2.3配置 CLASSPATH


打包后的 Jar 文件无法直接使用。

如果删除 cn 文件夹并运行TestMessage.java 文件,将会出现如下错误

image.png

在 Java 中,如果你尝试通过 javac -d.TestMessage.java 这样的路径访问某个文件或资源时,系统提示文件不存在,这是因为即使你将文件放置在程序同级目录中,Java 也不会自动识别它。Java 程序需要通过类路径(Classpath)来定位资源文件。如果你尝试用 RAR 工具直接打开一个 JAR 文件,虽然可以查看其内容,但这并不意味着 RAR 能够理解 JAR 文件的结构。


打开 JAR 文件后,你会看到一个名为 META-INF 的目录,这是 JAR 文件的元信息目录,其中包含了一些重要的配置文件,例如 MANIFEST.MF。这个文件是 JAR 文件的清单文件,记录了 JAR 文件的元数据信息,例如主类、版本号、依赖库等。在开发中,尤其是移动应用(如 ME 平台手机游戏)或运营商渠道发布时,这些配置文件会包含应用程序的关键信息,例如渠道标识、运营商配置等。


如果你在程序中无法正确加载资源文件,可能是因为类路径未正确配置。每个 JAR 文件实际上都是一个独立的程序路径,Java 程序需要通过 Classpath 来指定这些路径。要在 Java 程序中使用这些路径,必须通过配置 Classpath 来实现。具体配置方法可以通过命令行参数 -classpath 或环境变量 CLASSPATH 来指定资源文件的路径,确保程序能够正确加载所需的文件或资源。代码操作如下:

SET CLASSPATH=.;d:\mldndemo\mldn.jar

再次运行代码,运行成功

image.png

 

2.4建立测试类


建立一个测试类,直接导入 Message 类并调用方法:

package cn.mldn.test;
public class TestMassage {
    public static void main(String[] args) {
        cn.mldn.util.Message meg = new cn.mldn.util.Message (); //实例化类对象
        System.out.println(msg.getContent());
    }
}

随后就可以正常编译 TestMessage 类并且使用这个类:

编译程序类: javac -d. TestMessage.java

解释程序: java cn.mldn.test. TestMessage

注:如果现在的程序编译通过,但 CLASSPATH 发生改变,类无法加载到,则执行 TestMessage 类的时候将会出现如下的错误提示: “ Exception in thread”mainjava.long.NoClassDefFoundError:cn/mldn/util/Message”. 出现这种错误只有一种情况: *jar  包没有配置正确。

image.png

注: JDK1.9 以前所有的历史版本之中实际上提供的是一个所有类的 *.jar 文件(rt.jar,tools.jar),如果启动 Java 虚拟机,那么就需要加载这几十兆的类文件:但是很多时候不需要这么多包,所有在1.9以后提供模块化包,将原本很大的 Jar 文件变为若干个文件,根据需求加载所需模块(模块里面有包),可以实现启动速度变快的效果。

在整个 Java 中,模块名称都在 jdk-9.0.1 jmods中,程序需要的模块会帮助自动加载,找到程序的说明也需通过模块来找。

image.png

在下图的标注的地方做拆分处理,

image.png

假设做模块操作,会发现有模块化。

image.png

 

JAR文件里支持了模块化的处理配置,通过它进行控制,但是在现在的开发中,模块化对我们的开发意义不大,有兴趣可自行研究,正常后面会强调分布式的情况,分布式情况下,程序加载是有限的,如果要做一些系统时,这种模块化是有帮助的。

相关文章
|
11月前
|
Java Shell Docker
Docker启动后怎样运行jar包文件
Docker启动后怎样运行jar包文件
|
11月前
|
存储 Java 开发者
深入理解Jar文件:创建、使用和多版本控制
深入理解Jar文件:创建、使用和多版本控制
181 0
|
5月前
|
Java 开发者
修改JAR文件工具
本文介绍了一款名为JarEditor的IDEA插件,该插件允许用户直接对JAR包内的文件进行增删改查操作,无需先行解压。通过简单的安装与使用步骤,大大简化了传统上需要解压缩、反编译、重新编译及打包的过程。此外,JarEditor还支持对混淆过的JAR文件进行字节码级别的修改,并提供了强大的搜索功能,支持大小写、全词匹配和正则表达式搜索。对于开发者而言,这款插件无疑极大提高了处理JAR文件的效率和便捷性。
233 14
|
10月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
115 0
|
6月前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
2237 1
|
11月前
|
SQL Java 流计算
Flink SQL UDF(用户自定义函数)需要打包成JAR文件并上传到Flink集群中
【1月更文挑战第1天】【1月更文挑战第2篇】Flink SQL UDF(用户自定义函数)需要打包成JAR文件并上传到Flink集群中
447 0
|
10月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
110 1
|
11月前
|
Java
win10下修改jar中的文件
win10下修改jar中的文件
106 1
win10下修改jar中的文件
|
10月前
|
IDE 数据可视化 Java
Java基础6-Java文件和Java包结构和常用的jar包(二)
Java基础6-Java文件和Java包结构和常用的jar包(二)
129 0
|
10月前
|
Java Unix 编译器
Java基础6-Java文件和Java包结构和常用的jar包(一)
Java基础6-Java文件和Java包结构和常用的jar包(一)
153 0

热门文章

最新文章

下一篇
oss创建bucket