java运行war文件_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入口,也是能正常输出的。

一、命令行:

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,内容如下:

packagejartest;public classMyProgram {public static voidmain(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.0Main-Class: jartest.MyProgram

注意:上面的内容上要留多一行空的,不然无法识别。

接下来就是测试命令行:

这里假设我的文件放在这个目录: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

2、WAR:

经过研究,打war包也是通过jar命令进行完成,不同的是后缀变了,所以直接运行上面的打包命令即可。

二、GUI工具eclipse:

1、JAR:

eclipse下打jar包相对来说比较简单,不用关心MANIFEST.MF文件的编写,只需要把核心放在代码上即可。

具体操作:

说明:假设已经建立好工程,下面就是直接GUI的操作。

①项目->【右键】->【Export】

②选择【JAR file】

8d7f9561a111566eb2ed6f5caebd332a.png

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

9b6d1752356b88028be8cf17a4988a6a.png

④Next

ce8d06c84caf25dabbc37af0f68c2f98.png

⑤选择Main class:

7d801fcadbbc1618622971052754d6eb.png

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

790886115a93ff1fb96bbb2e1151594b.png

完全正常。

总结:其实eclipse这样的GUI工具非常方便的到处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项目)

2065b4cf3407a313645fd5b2fb4abd09.png

ff865fc1cd3a6512eedc30eaa11a0643.png

08bb05e45e5e32ba1a82b650ec1416c9.png

dd66efdad5432ef72c1dc2c7092b6190.png

新建jsp页面

676718d40839999cf45875d0942f22e8.png

dbeb0ebb07658fd7885bc819a06b2117.png

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

8f983acd277e9e44be19860a5c3a0d60.png

b367c9e678a713924f3883beabc2d364.png

②到处war包

项目右键->【Export】->【WAR file】

50dc1fbf99091a05e574eb0f84c09d31.png

16a6fcb7b740d3376d5a1150a7841aaa.png

总结:到处war包相对来说比较简单。

三:maven

此方法省略,以后会统一详解maven的构建。

无需数据库 本资源含界面预览 本系统没有数据库,您可将目前网络上任意网站接口瞬间变成您数据源,取数据超 easy ------------------------------------------------ -----------------如何部署------------------------- ------------------------------------------------ 下载压缩,将压缩 yijavaBlog-1.0.0.war 解压缩到 Tomcat webapps/ROOT 即可访问浏览 ------------------------------------------------ -----------------接口配置例子------------------- ------------------------------------------------ { name:"mobileSegment", url:"https://api.it120.cc/common/mobile-segment/location", returnType:"json" } 上面配置后,您就可以直接在 html 静态页面上这样写: ${mobileSegment("mobile=13500000000").data.province} 即可在页面上显示 “广东” ,除了 province ,您可以获取接口返回任意数据哦 ~ ------------------------------------------------ -----------------关于接口------------------------ ------------------------------------------------ 目前有很多网站偶读提供了接口服务,比如 juhe.cn apistore.baidu.com market.aliyun.com/data 您无需担心接口稳定性速度等问题 您自己搭建数据库能比他们稳定、安全么? 脱离了数据库还有一个棒棒原因: 您可以随时更换你网站服务器,而不要关心数据迁移问题,因为数据本身就是保存在 阿里云、百度、聚合数据 上 同时,聪明您或许发现了 : 可以同时部署在多台服务器上,配置一样接口即可,不就轻松实现分布式集群部署了么 ?~ ------------------------------------------------ -----------------开源项目------------------------ ------------------------------------------------ 本项目是一个开源项目,所以您完全可以免费使用,同时也希望您加入到这个项目贡献来,为开源出一份微博之力吧 :~ 开源项目地址: https://github.com/gooking/yijava-blog 有什么好想法或者建议,欢迎在 github 上面给我留言、互动 ~
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

weixin_39574287

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值