zoukankan      html  css  js  c++  java
  • java基础十[包、Jar存档文件和部署](阅读Head First Java记录)

    将Java的class文件生成为可执行的Java应用程序。Java应用程序有三种:完全在本机执行的Jar(例如本机的GUI可执行程序);完全在服务器端远程执行的(例如浏览器来进行存取);介于两者之间的组合(例如客户端在本地,与远程服务器交互)
     
    将class文件生成JAR
     
    指定编译时class类文件的存储目录
    打JAR(JavaArchiveFile)包仅需要编译后的class类文件,不需要源代码.java文件。可以通过-d指定编译结果输出的class存放目录
    例如:java -d ../classes MyApp.java
    也可以通过*.java匹配所有java文件进行编译
     
    创建一个可执行的JAR
    JAR包不需要把文件抽出来就可以用,程序可以保存在JAR中进行执行。主要JAR文件需要包含一个mainfest文件,带有了JAR的信息,文件需要指定哪个类还有main()方法。JAR文件不包含源代码,都是class文件
     
    1.所有class文件需要放到同一个目录下,并在该目录下创建mainfest.txt文件
    2.manifest.txt需要用下面一行来指定包含main()的类:
    Main-Class:MyApp
    MyApp为包含main()的class类,不要写后面的.class(该行内容后面需要加换行)
    3.执行jar工具来创建带有所有类以及mainifest的JAR文件
    进入class所在目录
    jar -cvmf manifest.txt outputname.jar *.class或jar -cvmf manifest.txt outputname.jar MyApp.class
    manifest.txt指定main()入口
    outputname.jar指定生成的jar的名字
    *.class指定要打包的class文件
     
    执行JAR
    首先确保JAR文件在classpath下,否则Java虚拟机找不到JAR。
    执行方式:java -jar xxx.jar
     
    用包管理class文件,并生成JAR
    用包可以防止类名冲突,完整的包中的类的名字是【包名.类名】,在类中、.java文件编译成class文件,jar执行的时候都要用包含包名的完整名字
     
    1.把类放进包中
    包名的命名一般是把域名反过来用,然后再后面再加其他的名字,例如com.wuba.zhuanzhuan.xxxx
    包下面的类,第一行需要加入包指令【package com.wuba.zhuanzhuan.xxx;】
    类需要放在包对应的目录结构下,包名的每个.的左右都代表一级目录,上面的包名例子,类文件需要放在com->wuba->zhuanzhuan>xxx的文件夹下
     
    2.编译包
    使用-d来进行编译,会按照包文件的目录创建一个编译的目录,将编译后的class文件放到对应层级的目录下
    例如:
    cd 包所在的目录(注意不是.java文件所在目录)
    javac -d ../classes com/wuba/zuanzhuan/xxx/*.java
    (如果class编译输出的路径还没有创建好,-d会根据源代码的目录创建目录)
     
    3.执行包
    必须指定包的完整名称进行执行,Java虚拟机能够找到包下的class文件
    java com.wuba.zhuanzhuan.xxx.MyApp
     
    4.以包创建可执行的JAR
    将包打包成JAR,包目录必须在JAR中,包的第一层目录必须是JAR的第一层目录
    4.1首先需要确定所有的class文件都在正确的包目录下
    4.2创建mainfest.txt描述哪个类带有main(),一定要使用包含报名的完整的类名称
    Main-Class:com.wuba.zhuanzhuan.xxx.MyApp
    然后把manifest.txt放到包所在目录下(classes)
    4.3执行jar工具创建包含目录结构和mainfest的JAR
    jar -cvmf manifest.txt MyApp.jar com
    只要指定包的最顶层目录即可,剩下的不用管
     
    JAR的操作
     
    生成JAR
    进入class所在文件,如果是包的话需要进入包所在目录
    创建manifest.txt文件指定main函数入口
     
    jar -cvmf manifest.txt outputname.jar *.class
     
    执行JAR
    首先确保JAR文件在classpath下,否则Java虚拟机找不到JAR。
    执行方式:java -jar xxx.jar
     
    JAR文件的构成
    查看JAR文件内容【jar -tf xxx.jar】(tf为table file)
    class文件目录与打包时的目录一致,在根目录下还有一个META-INF->MANIFEST.MF文件。这个文件是jar工具自动生成的,jar没有保存main入口的manifest.txt文件,而是将它的内容放到了MANIFEST.MF文件中
     
    解压JAR包
    解压JAR包【jar -xf xxx.jar】(xf为extract file)
     
    Java Web Start
    Java Web Start(JWS)部署方式可以使用户通过浏览器下载应用程序,在本地启动,并且可以检测更新
     
    Java Web Start的工作方式
     
    第一步:用户点击浏览器上的.jnlp文件下载链接
     
    第二步:Web服务器将.jnlp文件发送给客户端浏览器
     
    第三步:客户端浏览器启动Java Web Start,JWS的helper app读取.jnlp文件,然后通过.jnlp的内容向Web服务器请求JAR
     
    第四步:Web服务器发送.jar文件
     
    第五步:JWS取得.jar文件并调用指定的main()来启动应用程序
    然后用户可以在离线的情况下通过JWS来启动应用程序
     
    创建与部署Java Web Start的步骤
    第一步:将应用程序制作成可执行的JAR
    参考前面的内容
     
    第二步:编写.jnlp文件
    该文件指定了当前JAR的版本、.jar的下载地址、以及JAR的main()入口
    格式:
    <?xml version="1.0" encoding="UTF-8"?>
    <jnlp spec="1.0+" codebase="指定相关文件起始目录" href=“相对codebase的路径">
        <information>
            <title>Dynamic Tree Demo</title>
            <vendor>Dynamic Team</vendor>
            <icon href="sometree-icon.jpg"/>
            <offline-allowed/>
        </information>
        <resources>
            <!-- Application Resources -->
            <j2se version="1.3+">
            <jar href=“可执行JAR的名称(xx.jar)" main="true" />
        </resources>
        <application-desc  main-class=“和mintiest一样,指定哪个类带有main()”/>
    </jnlp>
     
    jnlp是一个xml文件,<information>信息是给helper app用的,显示java应用程序的信息
    j2se version指定了java需要的最低版本,如果没有安装会自动安装java
     
    详细的jnlp文件格式可以参考下面链接:
     
    第三步:把.jnlp和JAR文件放到Web服务器
     
    第四步:对Web服务器设置新的mime类型
    application/x-java-jnlp-file
     
    第五步:设定网页链接到.jnlp文件
    这步是为了从浏览器上下载.jnlp文件的
     
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/meitian/p/5828073.html
Copyright © 2011-2022 走看看