将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文件的
 

java基础十[包、Jar存档文件和部署](阅读Head First Java记录)的更多相关文章

  1. java基础三 [深入多态,接口和多态](阅读Head First Java记录)

    抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{      public void roam ...

  2. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  3. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  4. 【原创】Java基础之简单修改jar包中的class

    有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 # cd lib # ls test.jar ...

  5. java基础19 导包和“命令行”打jar包

    1.导包 1.1.包 java中的包就相当于Windows文件夹        编译格式:javac -d . 类名.java 1.2.包的作用 1.解决了类名重复冲突的问题    2.便于软件版本的 ...

  6. java基础八 [序列化和文件的输入/输出](阅读Head First Java记录)

    对象具有状态和行为两种属性.行为存在类中的方法中,想要保存状态有多种方法,这里介绍两种: 一是保存整个当前对象本身(通过序列化):一是将对象中各个状态值保存到文件中(这种方式可以给其他非JAVA程序用 ...

  7. java基础知识3--如何获取资源文件(Java中获取资源文件的url)

    java开发中,常见的resource文件有:.xml,.properties,.txt文件等,后台开发中经常用到读取资源文件,处理业务逻辑,然后返回结果. 获取资源文件的方法说明getResourc ...

  8. Java 基础-IO、stream 流、文件操作

    输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...

  9. Java基础语法:包机制

    为了更好地组织类,Java 提供了包(package)机制. 这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class).接口(interface).枚举(enumerations)和注释( ...

随机推荐

  1. C/C++的四大内存分区 分类: C/C++ 2015-05-09 01:36 163人阅读 评论(0) 收藏

    导读 正确的理解C/C++程序的内存分区,是合格程序猿的基本要求. 网络上流形两大版本内存分区,分别为: 1. 五大内存分区:堆.栈.全局/静态存储区.自由存储区和常量存储区. 2. 五大内存分区:堆 ...

  2. Android学习六:Socket 使用

    1socket的作用 通过http去获取服务器的数据在有些情况下是行不通的,所有使用socket与服务器通信也是必须掌握的 2.代码 好了上代码,代码中有解释,首先是简单的服务端代码 package ...

  3. vb6 获取 http only 的 Cookie

    Option Explicit ' No more data is available. ' The data area passed to a system call is too small. P ...

  4. Sea.js学习1——初识Sea.js

    Sea.js 是一个成熟的开源项目,核心目标是给前端开发提供简单.极致的模块化开发体验. 使用 Sea.js,在书写文件时,需要遵守 CMD (Common Module Definition)模块定 ...

  5. MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)

    MongoDB 备份(mongodump) 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的 ...

  6. TOMCAT如何建立两个端口或服务

    近日,一个客户需要将系统放到公网上,局网测试的时候用的8080,但该端口已经被其它应用占用,但又不想更改之前的端口,于是查了下资料,以供后阅 针对客户的这个情况,只是说想增加一个端口,这时只需要去to ...

  7. js call()和apply()

    一.call()和apply(),实例如下: function add(a,b) {     alert(a+b); } function sub(a,b) {     alert(a-b); } a ...

  8. (C#) 反转字符串,反转一个句子中单词。

    这个是非常基本的一道面试题,但是要考虑周全. 首先反转一个字符串: 基本思路是变成Char数组,然后调用C#里面的方法,或者设定两个index,从头,尾向中间遍历,并交换. 方法一: Array.Re ...

  9. gerrit: Error in POST /accounts/self/preferences

    转载:https://code.google.com/p/gerrit/issues/detail?id=3157 1. Migrated from 2.8.6.1 to 2.10 2. In UI ...

  10. 2012年第三届蓝桥杯C/C++程序设计本科B组决赛

    1.星期几(取余/excel) 2.数据压缩 3.拼音字母(比较) 4.DNA比对(dp) 5.方块填数 1.星期几[结果填空] (满分5分)    1949年的国庆节(10月1日)是星期六.     ...