首页 > 其他分享 >13 Jar&包

13 Jar&包

时间:2023-03-19 17:13:29浏览次数:34  
标签:文件 13 Jar JAR manifest jar classes 目录

这一章主要介绍:

  • 如何把写好的程序交给客户?
  • 如何组织、包装与部署Java程序?

13.1 Java的部署

  • Java程序是由一组类所组成。那就是开发过程的输出。
  • 现在该把程序塑造成可部署给外人使用的形式。

部署分类:

  • 本机部署
    • 整个程序都在用户的计算机上以独立、可携的GUI执行,并以可执行的Jar来部署。
  • 远程部署
    • 整个应用程序都在服务器端执行,客户端通过非Java的形式,可能是浏览器的装置来存取。
  • 两者间的组合
    • 应用程序被分散为用户本地系统运行的客户端,连接到执行应用程序服务的服务器部分。

13.2 JAR

组织类:

  • 带有一堆源代码和类文件的目录是非常混乱的,需要让源代码和编译出的文件分开,也就是说确保编译过的类文件不会放在源代码的目录中。

  • 关键在于结合-d这个编译选项和目录组织的结构。

    • 项目目录

      • source,源代码(.java)存储在该目录下

      • classes,编译时动点手脚让输出(.class)产生在classes目录。

      • -d,实际上是directory

      • #编译程序
        cd Myproject/source
        javac -d ../classes MyApp.java
        
        #执行程序
        cd Myproject/classes
        java MyApp
        

把程序包进JAR:

  • JAR就是Java ARchive。
  • 这种文件是个pkzip格式的文件,它能让一组类文件包装起来,所以交付时只需要一个JAR文件。
  • JAR,是指集合起来的文件;jar是用来管理文件的工具。
  • 需要创建出可执行的JAR,代表着用户不需要把文件抽出来就能运行。
    • 程序可以在类文件保存在JAR的情况下执行。
    • 秘诀在于创建出manifest文件,它带有JAR信息,告诉虚拟机哪个类含有main()方法。

创建可执行的JAR步骤:

  • 确定所有的类文件都在classes目录下

  • 创建manifest.txt来描述哪个类带有main()方法

    • Main-Class:MyApp
      //要有换行
      
    • 该文件放在classes目录下

  • 执行jar工具来创建带有所有类以及manifest的JAR文件。

    • cd MiniProject/classes
      jar -cvmf manifest.txt app1.jar *.class
      #或者
      jar -cvmf manifest.txt app1.jar MyApp.class
      
  • JAR里面没有源文件

执行JAR:

  • 大部分完全在本机的Java应用程序都是以可执行的JAR来部署的;

  • Java虚拟机能够从JAR中载入类,并调用该类的main()方法;事实上整个应用程序都可以包在JAR中,一旦main()方法开始执行,JVM不会在乎类从哪来,只要能找到就行。其中一个来源就是classpath指定位置的所有JAR文件。如果看到某个JAR,则Java虚拟机会在需要类时查询次JAR。

  • cd MyProject/classes
    java -jar app1.jar
    #-jar标识告诉虚拟机所给的是个JAR
    

13.3 包

用包主要是防止类名称的冲突

同时也要防止包命名冲突。——反向使用domain的包名称。

  • com.headfirstjava.projects.Chart
    

把类包进包中:

  • 选择包名称;

  • 在类中加入包指令;

    • package com.headfirstjava;
      
    • 每个原始文件智能有一个包指令。

  • 设定相对应的目录结构。但同时也要把相应源文件放在相对应目录下。

编译包和执行包:

  • 当类包在包中,编译和执行都要有技巧,主要问题来自于编译器和Java虚拟机都得要能够找到你的类以及所用到的其他类。

  • #编译
    cd MyProject/source
    javac -d ../classes com/headfirstjava/PackageExercise.java
    # -d ../classes是要求编译器将输出放到class目录下正确的包位置
    
  • #执行
    cd MyProject/source
    java com.headfirstjava.PackageExercise
    
  • 必须得指定完整的包名称,Java虚拟机会看得懂并找到当前目录下的com目录,其下应该有headfirst目录,那里应该能找到class,class在其他位置都无法运行。

  • -d的好处:

    • 可以把编译结果输出到别的地方;
    • 可以把类依照包的组织放到正确的目录上;
    • 假设源代码目录结构设定好,但还没有设定相对应的输出目录结构。-d也会让编译器在遇到目录结构尚未建立时主动帮做出来。

以包来创建可执行的JAR:

  • 确定所有的类文件都放在class目录下正确相对应的包结构中;

  • 创建出manifest.txt文件来描述哪个类带有main(),以及确认有使用完整的类名称;

    • Main-class: com.headfirstjava.PackageExercise
      
    • 然后把manifest文件放在classes目录下。

  • 执行jar工具来创建带有目录结构与manifest的JAR文件。

    • cd MyProject/classes
      jar -cvmf manifest.txt packEx.jar com
      
    • 只要指定com目录就行,其下的整个包的类都会被包进JAR中。

  • 条列和解压的jar命令

    • 将JAR内容列出

      • jar -tf packEx.jar
        
    • 将JAR内容解开

      • cd Skyler
        jar -xf packEx.jar
        
  • manifest文件所在:

    • jar工具会自动地创建META-INF目录,以及MANIFEST.MF文件;
    • manifest.txt不会被带进JAR中,它的内容会放进真正的manifest中。

标签:文件,13,Jar,JAR,manifest,jar,classes,目录
From: https://www.cnblogs.com/whxky/p/17233642.html

相关文章