程序部署大致分为三类,1.本机-整个程序都在用户计算机上独立运行(单机版程序) 2.远程-整个程序都在服务器端执行,客户端通过非java形式,比如浏览器进行访问
3.介于两者之间-本地运行的客户端,连接到执行应用程序服务的服务端部分。
一.打包
1.cmd命令行方式打包java源代码(.java文件-即src下面的所有包)为jar包---安装好了jdk环境
2.cd到源代码目录下,编译成字节码文件,输出到指定文件夹
javac -d out(输出目录 ) src/com/java/test/*.java src/com/java/user/*.java
3.上面我们得到一个out/字节码.class文件集合,然后要把它们打包为jar包,这里需要生产可执行jar,配置主类信息,告诉哪个类包含主函数
创建一个名为manifest.txt,编辑:
Manifest-Version: 1.0
Class-Path:
Created-By: 1.6.0_06 (Sun Microsystems Inc.)
Main-Class: src/iotest/testmain
------冒号后多个空格,否则可能报错invalid header field
4.执行打包
manifest.txt放在out下
cd到txt目录同级,
运行:jar -cvmf manifest.txt app1.jar iotest
只需要写包名就行,iotest包下是所有项目代码
5.运行jar包
java -jar app1.jar
当然,cmd执行时最好cd到app1.jar所在的目录
报错了,jar没有主清单属性,意思是manifest中生成的MANIFEST.MF中没有写Main-Class信息,去查看了一下真没有,我擦,明明写了,被吃了?
Main-Class:空格 包名.类 手动添加了进去,检查了一下没错啊,肿么回事,还是不行
终于找到原因,Main-Class我写在最后一行,行最后需要回车换行,否则生成不了main-class这行
继续执行又报另一个错,说是无法找到主类,我晕。猜测是因为打包的结构关系与manifest中main-class不一致导致
之前的目录结构:src下有两个文件夹,一个放代码,一个放资源文件。打包时为了将两个部分都包含进jar里,所有多加了一层项目名
即双击打开jar包的结构是,项目名/代码&资源,这样导致找不到主类
我修改了一下目录结构,将src下只放一个目录,加一层变成 src/主目录/代码&资源文件&其它,主目录是.java中包名,例如package main.iotest;的main
所有的其它资源,代码都在main的下级包中,这样打的jar包双击打开第一层就是main,那么main-class: main.xxx.xxx就ok了
6.这样执行java -jar xxx.jar 运行成功。
二,部署
https://www.ibm.com/developerworks/cn/java/j-webstart/index.html