“化繁为简”-神奇的Jar命令 | 带你学《Java面向对象编程》之六十九

简介: 简单的测试开发中可以通过javac命令进行编译,但当类的数量变多以后,编译出的.class文件也会急剧增多,本节将教你使用jar命令进行打包处理这些文件。

上一篇:导入其他包,轻松实现跨包调用 | 带你学《Java面向对象编程》之六十八
【本节目标】
通过阅读本节内容,你将了解到Java中打包的概念,了解Java系统常用的包,学会使用jar命令打出一个jar文件并能通过配置在其他类中调用包内的类。

Jar命令

当一个项目开发完成之后一定会存在有大量的*.class文件,那么对于这些文件的管理往往可以利用一种压缩结构的形式进行处理,而这样的结构在Java之中就被称为Jar文件,如果要想将程序打包为Jar文件,那么可以直接利用JDK提供的Jar命令。
在最原始的时候如果要想知道jar命令的时候直接输入jar即可,而在JDK1.9之后为了统一化,所以需要使用“--help”查看相关的说明。

image.png
图一 jar命令相关说明

下面通过程序的具体演示来实现jar的使用与配置的操作。
1、定义一个程序类,这个类的代码如下:

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

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

  • 对程序打包编译:javac -d . Message.java;
  • 此时会形成cn的包,包里面有相应的子包与*.class文件,将其打包为mldn.jar:jar -cvf
    mldn.jar cn;

    • “-c”:创建一个新的jar文件;
    • “-v”:得到一个详细输出;
    • “-f”:设置要生成的jar文件的名称,此处定义的是“mldn.jar”;

image.png
图二 打包处理

3、每一个*.jar文件都是一个独立的程序路径,如果要想在Java程序中使用此路径,则必须通过CLASSPATH进行配置;
SET CLASSPATH=.;d:mldndemomldn.jar
4、建立测试类,直接导入Message类,并且调用方法 ;

package cn.mldn.test ;
public class TestMessage {
    public static void main(String  args[]) {
        cn.mldn.util.Message msg = 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 ”main” java.lang.NoClassDefFoundError: cn/mldn/util/Message
出现这种错误只有一种情况:*.jar包没有配置正确。
JDK1.9之后出现的模块化操作

  • 在JDK1.9以前所有的历史版本之中实际上提供的是一个所有类的*.jar文件(rt.jar、tools.jar),在传统的开发之中只要启动了java的虚拟机,那么就需要加载这几十兆的类文件;
  • 在JDK1.9之后提供了一个模块化的设计,将原本很大的要加载的*.jar文件变成了若干个模块文件,这样在启动的时候可以根据程序加载指定的模块(模块中有包),就可以实现启动速度变快的效果。

系统常用包

Java语言从发展至今一直提供有大量的支持类库,这些类库一般由两个方面组成:

  • Java自身提供的(除了JDK提供的之外还会有一些标准);
  • 由第三方厂商提供的Java的支持类库,可以完成各种你所需要的功能,并且支持的厂商很多;

而在JDK之中也会提供有大量的类库,并且这些类库都是封装在不同的开发包之中的:

  • java.lang:像String、Number、Object等类都在这个包里面,这个包在JDK1.1之后自动默认导入;
  • java.lang.reflect:反射机制处理包,所有的设计从此开始;
  • java.util:工具类的定义,包括数据结构的定义;
  • java.io:进行输入与输出流操作的程序包;
  • java.net:网络程序开发的程序包;
  • java.sql:进行数据库编程的开发包;
  • java.applet:Java最原始的使用形式,直接嵌套在网页上执行的程序类;

    • 现在的程序已经以Application为主了(有主方法的程序);
  • java.awt、javax.swing:Java的图形界面的开发包(GUI),其中awt是属于重量级的组件,而swing是轻量级的组件;

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:访问权限进修课-protected | 带你学《Java面向对象编程》之七十
更多Java面向对象编程文章查看此处

相关文章
|
5月前
|
Java Linux
java的jar后台启动
java的jar后台启动
109 14
|
5月前
|
Arthas 存储 监控
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
271 8
|
6月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
367 13
|
8月前
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
406 30
|
8月前
|
Java
Java中执行命令并使用指定配置文件的最佳实践
通过本文的介绍,您可以了解如何在Java中使用 `ProcessBuilder`执行系统命令,并通过指定配置文件、设置环境变量和重定向输入输出流来控制命令的行为。通过这些最佳实践,可以确保您的Java应用程序在执行系统命令时更加健壮和灵活。
164 7
|
11月前
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
304 63
|
8月前
|
前端开发 JavaScript Java
Java打包jar运行时分离lib和jar
在`pom.xml`的`build`节点中,设置`packaging`为`jar`,并配置插件分离依赖库到`lib`目录和资源文件到`resources`目录。这样可以在运行时通过`-Dloader.path=lib,resources`加载外部依赖和资源文件,便于独立升级依赖库和修改资源文件,而无需重新打包程序。具体插件包括`maven-dependency-plugin`、`maven-resources-plugin`和`spring-boot-maven-plugin`等。
369 1
|
10月前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
2326 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
9月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
466 15
|
12月前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
203 63