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文件格式可以参考下面链接:

http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/jnlpFileSyntax.html#jnlp

第三步:把.jnlp和JAR文件放到Web服务器

第四步:对Web服务器设置新的mime类型

application/x-java-jnlp-file

第五步:设定网页链接到.jnlp文件

这步是为了从浏览器上下载.jnlp文件的

时间: 2024-07-28 13:56:22

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

Head first java chapter 17 包、jar存档文件和部署

包,jar存档文件和部署

一:将源代码与类文件分离 源码.java存储在source目录下.编译文件.class存储到classes目录下. 命令: cd  MyProject/source javac -d ../classes MyApp.java/*.java(代表目前目录所有的源文件) 二:程序包进jar 打jar包: 1.jar -cvf hello.jar hello.class 2:打开新打的jar包,复制MANIFEST.MF文件,到hello.class一起. 修改其内容为: Manifest-Vers

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

抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{ public void roam(){} } 抽象类除了被继承过之外,是没有用途,没有值,没有目的.类中的方法可以当做子类的合约内容,合约是对其他程序的承诺协议 抽象类中可以带有抽象和非抽象的方法 如果类中有抽象方法,则类必定标识为抽象的. 2.抽象的方法没有实体 (因为方法中的程序代码没有意义.抽象类需要被extend过有意义,抽象方法一

Java基础十--接口

Java基础十--接口 一.接口的定义和实例 1 /* 2 abstract class AbsDemo 3 { 4 abstract void show1(); 5 abstract void show2(); 6 } 7 8 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 9 另一种形式定义和表示,就是 接口 interface. 10 */ 11 12 //定义接口使用的关键字不是class,是interface. 13 //interface编译后还是.class文件,其实本质

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

Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println(f.num);//是父类,答案是3 2,成员函数(非静态). 编译看左边,运行看右边. 因为成员函数存在覆盖特性. Fu f = new Zi();//f.show();输出的是子类里面的show方法 3,静态函数. 编译和运行都看左边. 静态函数不具备多态性,多态性是对象的多态性,然后静态函数不涉

java基础七 [图形用户接口](阅读Head First Java记录)

到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口) 创建一个GUI:javax.swing.* 本章讲的布局相关内容都是javax.swing包下的内容,常用的组件有JFrame,JButton,JRadioButton,JCheckBox,JLabel,JList,JScrollPane,JSlider,JTextArea,JTextField,JTable等 创建GUI第一步:创建window(JFrame) JF

Java基础(十二)之包和权限访问

软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,package com.baidu; 编写Test.java: package mings; //将类防止到一个包当中 public class Test{ public static void main(String[] args){ System.out.println("Hello,package!

java基础十二[集合与泛型](阅读Head First Java记录)

集合 List 知道索引顺序的集合,ArrayList.LinkedList.Vector三个子类实现了List接口 ArrayList ArrayList没有排序方法,可以用Collections.sort(ArrayList对象)进行排序,但是Collections.sort()里面的ArrayList必须是String类型的,否则无法通过编译,除非该类型也继承或实现了Comparable LinkedList 针对经常插入或删除中间元素所涉及的高效率集合 Set 去重,独一无二的,不允许出

java基础中导入包的作用

junit     单元测试需要导入的包 JAXP Oracle 官方提供的 API,同时支持 DOM 和 SAX 的开发JDOM   JDOM 是一个开源项目,它基于树型结构,利用纯 JAVA 的技术对 XML 文档实现解析.生成.    序列化以及多种操作.Dom4j   是 JDOM 的升级品,用来读写 XML 文件的.具有性能优异.功能强大和极其易使用的特点,它    的性能超过 sun 公司官方的 dom 技术,同时它也是一个开放源代码的软件,Hibernate 也用它   来读写配置