`
xdw1626
  • 浏览: 171659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基础,手工打包

    博客分类:
  • java
阅读更多
jar命令的使用
                                         ++YONG原创,转载请注明
一、   的全称:jar
Java Archive File,java存档文件。这有点类似zip文件。
1.  命令用法:jar
jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
    -c 创建新的存档
    -t 列出存档内容的列表
    -x 展开存档中的命名的(或所有的〕文件
    -u 更新已存在的存档
    -v 生成详细输出到标准输出上
    -f 指定存档文件名
    -m 包含来自标明文件的标明信息
    -0 只存储方式;未用ZIP压缩格式
    -M 不产生所有项的清单(manifest〕文件
    -i 为指定的jar文件产生索引信息
    -C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。
 
示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:
                   jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有
           文件存档到一个名为 'classes.jar' 的存档文件中:
                   jar cvfm classes.jar mymanifest -C foo/ 。
 
2.  示例:
1) 我们只有一个HelloWorld,如下:   
public class HelloWorld{
  public static void main(String[ ] args){
      System.out.println(“Hi, Hello World!”);
  }
}
  将这个java文件存到C盘跟目录下,接下来,在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。
  基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。
  2) 紧接着我们看看如何运行我们的jar包。在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看(注意文件未尾有两空行):
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
 
 
 
这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行,注意在Main-Class:和类之间要有一个空格,否则运行时说“Invalid or corrupt jarfile xxx.jar”)。这个就是我们之前写的那个类,也就是我们的入口类。也即:(文件未尾的两个空行不能少,否则运行时也说“Invalid or corrupt jarfile xxx.jar”)
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: HelloWorld
 
 
接下来,我们在命令提示符里执行:   
jar umf MANIFEST.MF hello.jar
  这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新(其实也可用winrar之类的解压工具打开jar包,把新的MANIFEST.MF拖进去)。最后的一步,验证我们做的一切,在命令提示符中输入:
java -jar hello.jar
出现了什么, Hi, Hello World!
 
二、关于MANIFET.MF文件:
       打 Java 包的时候可以有一个清单文件:MANIFEST.MF,它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行 Java 应用程序时会根据此文件中给出的信息来查找入口类和支持库。
它的内容一般包括:
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: HelloWorld
 
 
其中比较容易忽略的是还可以有一个Class-Path属性的设置,Class-Path:用来指定支持库的路径,程序运行时依据 Class-Path 项的设置路径来查找支持库,每一个支持库之间用空格分开。比如这样写清单文件:
Manifest-Version: 1.0
Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-Class: org.qiujy.test.TestDB
 
 
这样当前目录的 lib 目录下的几个包都可以在运行时被找到,我们制作可自运行的 Java 程序时,就不用写一个批处理文件来写明 CLASSPATH ,直接在这里指定就可以了。
       示例:
       1) 在D:\qiujyJarTest目录下写一个测试数据库连接的类:   
package org.qiujy.test;
 
import java.sql.*;
 
public class TestDB{
 
    public static void main(String[] args){
        String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=myblog";
        try{
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            Connection conn = DriverManager.getConnection(url, "sa","");
            System.out.println(conn);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
       2) 用如下命令编译此文件:
javac -d . TestDB.java
       就会在当前目录生成带包结构的TestDB.class文件:
       3) 在当前文件下创建一jar清单文件qiujyManifest.txt (文件名随便取):(注意每行的”:”后有一空格,文件未尾有两空行)
Manifest-Version: 1.0
Class-Path: ./lib/msbase.jar ./lib/mssqlserver.jar ./lib/msutil.jar
Main-Class: org.qiujy.test.TestDB
 
 
       此时D:\qiujyJarTest目录的结构如下:
      
4) 用如下命令打jar包:
jar -cmvf qiujyManifest.txt test.jar lib org
此命令的含义是:指定打包的清单文件为当前目录下的qiujyManifest.txt,打当前目录下的lib和org目录打到test.jar包中。此时在当前目录下就会生成一个test.jar包。
       5) 测试打包是否成功:
       启动sqlserver数据库。在命令行用如下命令:java -jar test.jar。如果出现如下信息说明我们打的包成功运行并成功连上数据库。
       http://download1.csdn.net/down3/20070620/20101449378.rar
       附本演示的程序源码:
 
三、jar文件在tomcat中的发布
注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:
  1. 先准备我们要打包的资源。
  找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。
这是HelloWorld.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class HelloWorld extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse res)
         throws ServletException, IOException {
  res.setContentType("text/html");
  PrintWriter out = res.getWriter();
  out.println("");
  out.println("");
  out.println("");
  out.println("Hello, World!");
out.println("");
out.close();
 }
}
  
2.       对它编译。下面是web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 <servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>HelloWorld</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
 </servlet-mapping>
</web-app>
 
3. 在命令提示符下进到先前创制的hello目录下,执行 jar cvf hello.war * ,我们便得到hello.war。将它拷贝至webapps目录下,ok,来看最后一步,打开tomcat的目录conf中的server.xml,加入:
  <Context path="/hello" docBase="hello.war" debug="0" reloadable="true"/>
  
大功告成!运行它,启动tomcat,后在浏览器中输入http://localhost:8080/hello/HelloWorld,有了吗?祝你好运!
分享到:
评论

相关推荐

    vagrantboxes:手工制作的Arch Linux Vagrant基本框,带有

    游民箱用于手工制作的Vagrant基础框。发行版当前维护的盒子列表Arch Linux x86_64 Fedora 32(待添加) Oracle Linux 7.6 x86_64 Oracle Linux 6.9 x86_64 Oracle Linux 5.11 x86_64 最初的意图是将我最喜欢的Arch ...

    友情链接交易平台.站长亲测

    友情链接交易平台网站源码是一...4,单个友情连接购买,打包友情连接购买 5,支付宝网上接口 6,订单查询管理。 7, 支付网关充值后台手工充值,提现设置提现账户。 8,交易明细查询等等等。 站长亲测,附安装视频

    可用于Faster-RNN的信号灯数据集(带标签)

    数据集文件是在清华实验室采集到的交通路口图片的基础上,使用labelme对其进行交通信号灯的标注,标注采用VOC格式,全部手工标注,标注图片一共9812张,耗时两个月左,质量有保证。标注类别共18类,包括红灯,绿灯,...

    基于Debian的数据中心DebOps.zip

    DebOps 收集打包了一套 Ansible 方案和规则(Ansible是一种自动化运维工具),可以从1个容器扩展到一个完整的数据中心。它的创始人Maciej Delmanowski将DebOps开源来保证项目长久进行,从而更好的通过外部贡献者的...

    信号灯数据集地址.txt

    数据集文件是在清华实验室采集到的交通路口图片的基础上,使用labelme对其进行交通信号灯的标注,标注采用VOC格式,全部手工标注,标注图片一共9812张,耗时两个月左右,质量有保证。标注类别共18类,包括红灯,绿灯...

    数字签名工具-沃通代码签名精灵WoSignCode

    Signtool命令行工具要求用户有一定的DOS命令使用基础,签名软件时需要手工键入命令,比较繁琐;Signcode虽然有可视化界面,但是每次只能签名一个文件,不支持批量签名,签名多个软件时必须重复操作;此外,这两款...

    SP/CP增值业务垫付管理系统

    2)平台功能齐全,有通道实时切换功能(分手工和自动两种方式)、查询报表功能(可分客户分省分通道查询,有实时表和统计表)、独立客户查询网站、接口设置功能(根据不同客户自己灵活设置接口)、支持模糊指令、扣...

    无线增值业务管理系统

    2)平台功能齐全,有通道实时切换功能(分手工和自动两种方式)、查询报表功能(可分客户分省分通道查询,有实时表和统计表)、独立客户查询网站、接口设置功能(根据不同客户自己灵活设置接口)、支持模糊指令、扣...

    Python基础教程(第3版)-201802出版-文字版

    久负盛名的 Python 入门经典针对 Python 3 全新升级十个出色的项目,让你尽快可以使用 Python 解决实际问题目录第 1章 快速上手:基础知识 ........................ 1 1.1 交互式解释器 .............................

    Numpy用户指南.pdf

    4.4.1 不借助任何工具, 手动打包你的C语言代码。 147 4.4.2 Cython 148 4.4.3 ctypes 148 4.4.4 SWIG(自动包装发生器) 149 4.4.5 scipy.weave 149 4.4.6 Psyco 149 5. 与MATLAB比较 149 5.1 介绍 150 5.2 一些关键...

    Visual C++ 数据库系统开发完全手册.part2

    第2章 C++语言基础 2.1 C++概述 2.1.1 C++主要特点 2.1.2 利用Visual C++编制C++程序 2.2 C++程序的组成 2.2.1 标识符 2.2.2 关键字 2.2.3 常量与变量 2.2.4 基本运算符 2.3 C++数据类型 2.3.1 基本数据类型 2.3.2 ...

    Visual C++ 数据库系统开发完全手册.part1

    第2章 C++语言基础 2.1 C++概述 2.1.1 C++主要特点 2.1.2 利用Visual C++编制C++程序 2.2 C++程序的组成 2.2.1 标识符 2.2.2 关键字 2.2.3 常量与变量 2.2.4 基本运算符 2.3 C++数据类型 2.3.1 基本数据类型 2.3.2 ...

    maven window下安装包

    第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.5 在POM中配置/11.4.5.1 发布插件以及标签的基础目录 第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.5 在POM中配置/11.4.5.2 发布到私有仓库配置 第11章...

    《MyEclipse 6 Java 开发中文教程》前10章

    第三章 Eclipse 的基础概念,配置和使用 51 3.1界面布局 51 3.1.1菜单 51 3.1.2 工具栏 51 3.1.3 透视图(Perspective)切换器 52 3.1.4 视图(View) 53 3.1.5 上下文菜单(Context Menu) 55 3.1.6 状态栏(Status...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则...

    RadASM 中文汉化版

    1、把RadASM作者另一个资源编辑工具ResEd的汉化版也打包放在安装目录下,虽然RadASM自带有可视化的资源编辑器,但这个ResEd工具有些时候还是很有用的,你可以可视化的编辑其他的资源脚本,很方便。这个工具我以...

    IONIC 功能全演示

    ## 利于开发,测试和打包部署的nodejs环境 简单开发可以不依赖nodejs环境。但是有了基于nodejs的javascript完整开发周期环境,会极大提升开发效率,保障质量。 - nodejs 最新版。 - 有些node包的安装需要c++编译,...

Global site tag (gtag.js) - Google Analytics