Java中基本的打包jar和war文件(包括eclipse打包操作)
前言:
为什么要打jar包?
1、举个例子,当编写一个工具类库,里面有十几个类,每个类对应一个class文件时,为了方便别人调用,是不是要装在一个文件中,方便传递和引用。
2、打jar包还有一个好处,就是不包含源文件,对于一些机密信息的库,jar包和代码混浊是一个首选。
3、方便部署和引用。
打包jar有两类,包含main入口和不包含main入口的(大概的意思是比如一些jar是直接类库引用的,不需要执行,这些就不用包含main入口),这里一般都是包含main入口的进行测试。包含main入口也叫做可执行jar文件。
在打包可执行jar文件时,通常会有一个指定Main-Class入口的文件MANIFEST.MF,一般这个文件是放置在META-INF目录。详细的配置参考:http://www.cnblogs.com/EasonJim/p/6485677.html
war是针对web项目的,同时war包也是为了方便部署。
经过测试,在web项目上也能到处jar包,如果指定了Main-Class入口,也是能正常输出的。
JAR和WAR包的本质区别应该在于目录的结构,其打包的命令都是jar去完成的;结构参考:http://www.cnblogs.com/EasonJim/p/6498804.html
一、命令行:
1、JAR:
jar命令行的说明:jar -h
用法: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为绑定到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。
示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .
注意:jar打包也叫压缩,就唯一一个方法。
假设我已经建立好代码文件,命名为MyProgram.java,内容如下:
package jartest;
public class MyProgram {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello world");
}
}
注意:上面包含了包名jartest。
接下来要做的就是使用javac进行编译出字节码class文件。命令如下:
javac jartest/MyProgram.java
测试编译出的字节码在运行上会有所不同,你不能进入到jartest文件夹来运行,只能在外部这样执行:
java jartest.MyProgram
然后在最外层目录上新建MANIFEST.MF文件,内容如下:
Manifest-Version: 1.0
Main-Class: jartest.MyProgram
注意:上面的内容上要留多一行空的,不然无法识别。
接下来就是测试命令行:
参考:http://www.jb51.net/article/43033.htm
这里假设我的文件放在这个目录:D:\开发工程\GitHub\5_java_example\packagetest\commandlinetest\jar\,那么命令行需要进入到这个目录下。
①打包
jar cf JAR文件名称 程序文件名称或者程序所在的文件夹(可以使用通配符查找文件)
举例:
jar cf MyApp.jar jartest\MyProgram.class
②查看一个jar文件的内容
jar tvf JAR文件名称
举例:
jar tvf MyApp.jar
③将一个jar文件解压缩
jar xf JAR文件名称
举例:
jar xf MyApp.jar
④往压缩包里面增加文件
jar xf JAR文件名称 添加的文件或者其他的jar文件
举例:
jar xf MyApp.jar jartest\MyProgram_new.class.class
⑤更新一个jar文件
jar uf JAR文件名称 更新的文件或者其他的jar文件
举例:
jar uf MyApp.jar jartest\MyProgram_new.class.class
⑥创建一个可以运行的jar文件
jar cvfm MyApp.jar MANIFEST.MF 文件或文件夹路径
举例:
jar cvfm MyApp.jar MANIFEST.MF jartest\MyProgram.class
⑦运行一个jar程序
java -jar JAR文件名称
举例:
java -jar MyApp.jar
测试工程:https://github.com/easonjim/5_java_example/tree/master/packagetest/commandlinetest/jar
2、WAR:
经过研究,打war包也是通过jar命令进行完成,不同的是后缀变了,所以直接运行上面的打包命令即可。
二、GUI工具eclipse:
1、JAR:
eclipse下打jar包相对来说比较简单,不用关心MANIFEST.MF文件的编写,只需要把核心放在代码上即可。
具体操作:
说明:假设已经建立好工程,下面就是直接GUI的操作。
①项目->【右键】->【Export】
②选择【JAR file】

③选择要导出包的文件和路径

④Next

⑤选择Main class:

⑥测试到处的包能不能正常输出

完全正常。
总结:其实eclipse这样的GUI工具非常方便的到处jar包,并且可以选择其它的选项,而且免去自己手动配置这些文件的问题。
项目地址:https://github.com/easonjim/5_java_example/tree/master/packagetest/eclipsetest/jar
2、WAR:
说明:
war包一般针对web项目,但是经过测试web项目也能到处jar包,并可以指定入口,也就是可以执行。
war包一般是部署到容器中运行,比如tomcat,但是用jetty可以实现内嵌web的方式,然后用java -jar去运行,从而实现可执行的war包方式。这里先不讲解这种方式,后面再开专题详解研究。可以参考:https://www.eclipse.org/jetty/。线索:jetty内嵌war、war内嵌tomcat。
具体操作:
这里假设已经建立好web项目。
①新建web项目(重点在如何新建jsp项目)




新建jsp页面


右键,【Run as】->【Run On Server】


②到处war包
项目右键->【Export】->【WAR file】


总结:到处war包相对来说比较简单。
项目地址:https://github.com/easonjim/5_java_example/tree/master/packagetest/eclipsetest/war
三:maven
此方法省略,以后会统一详解maven的构建。
Java中基本的打包jar和war文件(包括eclipse打包操作)的更多相关文章
- 基于Java的打包jar、war、ear包的作用与区别详解
本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...
- ava的打包jar、war、ear包的作用、区别、打包方式
编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的 ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- idea16使用maven命令clean、编译、打包jar或者war
项目环境:idea16+jdk1.7+maven-3.3.9 项目说明:编写简单的java类,使用maven命令生成jar包,然后执行------->"java -classpath ...
- [转载] Java中动态加载jar文件和class文件
转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- SpringBoot简单(登录/显示/登出)工程下载 附带打包成ROOT.war文件并发布到tomcat里
下载地址:https://files.cnblogs.com/files/xiandedanteng/SessionShare20191226-1.zip 之前的工程仅能在Eclispe里跑起来,要把 ...
- Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案
注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...
- 用maven打包项目成war文件
打开pom.xml,右键选择Run As -> Maven package就可以自动打包成war文件了.
- 在java中使用SFTP协议安全的传输文件
本文介绍在Java中如何使用基于SSH的文件传输协议(SFTP)将文件从本地上传到远程服务器,或者将文件在两个服务器之间安全的传输.我们先来了解一下这几个协议 SSH 是较可靠,专为远程登录会话和其他 ...
随机推荐
- 面试常问 Java基础 冒泡排序
冒泡排序就是对一个数组进行排序. 用双层for循环就可以解决. 第一层,决定排序的次数. n个数,进行n-1次排序就行了. 第二层,把相邻的两个数比较,谁小,放到后面和下一个数字比较,谁小谁放到后面, ...
- TCP/IP网络编程之网络编程和套接字
网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...
- Jetty,Tomcat对MIME协议的配置参数说明
此处做一下小的汇总,针对Jetty容器内,存在excel的xlsx文件直接通过链接的方式下载的时候,如果是在Chrome浏览器时,则直接触发浏览器的下载行为,但是在IE11的浏览器上,则浏览器会直 ...
- linux学习(三) -- lnmp环境切换php版本,并安装相应redis扩展
原创文章,转载请注明出处 我想配置的环境是ubuntu+nginx+mysql+php+redis,其中php装两个版本,php7和php56 ubuntu+nginx+mysql+php的环境配 ...
- 47.关于gradle的解疑
Short Answer Gradle is a build system. Long Answer Before Android Studio you were using Eclipse for ...
- linux环境搭建系列之tomcat安装步骤
前提: Linux centOS 64位 JDK 1.7 安装包从官网上下载 安装Tomcat之前要先安装JDK. 我的JDK是1.7版本的,所以Tomcat版本也选了7的 1.新建目录tomcat ...
- 聊聊、Java 命令 第一篇
网上很多讲 Javac 和 Java 命令的,我觉得还是要自己写一写,做一个自己的总结,也方便以后查询. 开始之前先看看 help 命令,基本上任何一个软件都会提供这个命令. 没有什么比 -help ...
- python 列表、元组 详解
python中有6种序列的内置类型,分别为:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象 列表和元组是最常见两种类型. 下面将以列表(list)和元组(tuple)为例 ...
- CSS查缺补漏篇
前面的话:关于CSS,之前我已经做过一些基础的知识点介绍.CSS主要是用来给页面设置样式的,一般说来,在一个网站中,CSS应该独立封装在一个单独的.css外部文件中.样式的设置总体来说是不难的,但是需 ...
- 使用 Python 获取 Linux 系统信息
探索platform模块 platform模块在标准库中,它有很多运行我们获得众多系统信息的函数.让我们运行Python解释器来探索它们中的一些函数,那就从platform.uname()函数开始吧: ...