java学习笔记--如何用jar命令对java工程进行打包

来源:互联网 发布:java如何防止恶意注册 编辑:程序博客网 时间:2024/06/05 18:19
原文地址:http://www.blogjava.net/gosyl/archive/2008/04/18/194107.html
作为java攻城师的菜鸟,现在从java最基础的学起。。因为目前自己对于项目中用到的几个软件(git,gradle,Intellij idea(或者eclipse))的具体工作流程不是很清楚,因此,qf老师给我布置了这个任务:
1 写一个java类引用第三方类库
2 用cmd命令执行java类
3 用jar命令将Java类打包

于是,我在网上找到了这个博文,关于如何运用jar命令将文件打包介绍的很详细、全面:

1 为什么要把java程序打包?
为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包

2 如何对java程序进行打包?
下面对jar命令进行介绍,并举出几个简单例子针对不同情况进行打包

        一. jar命令用法:

         在cmd命令窗口下输入jar,回车,就会提示改命令的用法:

        

        二.例子(这里介绍的都是生成双击可执行的jar包):
  1.首先介绍如何在命令行下执行打包程序。
        1.1.没有包结构的最简单的工程。
            (1)在c:盘下新建文件“HelloWorld.java”:
        
1 public class HelloWorld
2 {
3     public static void main(String[] args){
4         System.out.println("Hello world!");
5     }
6 }
           
     (2)在命令行下输入c:\javac HelloWorld.java,  //在c:盘下编译生成“HelloWorld.class”。

            (3)在c:盘下新建文件“menefest”(没有后缀名):
           
Main-Class: HelloWorld
          
    注意:最后要有一个空行,否则会出现找不到类的错误。

             (4)打包:输入c:\jar cvmf menifest HelloWorld.jar HelloWord.jar HelloWorld.class  
                  //在c:盘下生成“HelloWorld.jar”。

             (5)执行:输入c:\java -jar HelloWord.jar     //屏幕回显“HelloWorld”。

        1.2.有包结构的java工程。
            (1)在c:\com\gosyl\demo\下新建文件“HelloWorld.java”:
        
package com.gosyl.demo;

public class HelloWorld{
    
public static void main(String[] args){
        System.out.println(
"HelloWorld");
    }
}

            (2)在命令行下输入
          c:\javac com/gosyl/demo/HelloWorld.java     
        //在c:\com\gosyl\demo\文件夹下编译生成“HelloWorld.class”。

            (3)在c:盘下新建文件“menefest2”(没有后缀名):
        
Main-Class: com.gosyl.demo.HelloWorld
            注意:最后要有一个空行冒号后面要一个空格。否则会出现找不到类的错误。

            (4)打包:输入
         c:\jar cvmf menifest2 HelloWorld.jar com/gosyl/demo/HelloWord.class
        //在c:盘下生成“HelloWorld.jar”。

            (5)执行:输入c:\java -jar HelloWord.jar
              //屏幕回显“HelloWorld”。

        1.3.引用到外部jar包的java工程。
            (1)在c:\com\gosyl\demo\下新建文件“Car.java”:
             
package com.gosyl.demo;

public class Car
{
    
public static void main(String[] args){
        Light.on();        
    }
}

            (2)在c:\com\gosyl\demo\下新建文件“Light.java”:
        
package com.gosyl.demo;

class Light 
{
    
public static void on(){
        System.out.println(
"Light is on!");
    }
}

            (3)打包1:输入c:\jar cvf  Light.jar com/gosyl/demo/Light.class
                  //在c:盘下生成“Light.jar”。
        
            (4)在c:盘下新建文件“menefest-car”(没有后缀名):
        
Main-Class: com.gosyl.demo.Car
Class
-Path: Light.jar
            注意:最后要有一个空行,冒号后面要一个空格。否则会出现找不到类的错误。

            (5)打包2:输入
            c:\jar cvmf  menifest-car Car.jar com/gosyl/demo/Car.class
                          //在c:盘下生成“Car.jar”。
        
            (6)执行:输入
            c:\java -jar Car.jar
        //屏幕回显“Light is on”。

    三.总结
        1.清单文件menifest,对格式要求很高,注意每个冒号后面要有一个空格,文件最后要有一个空行。
        2.对于引用到外部jar包的工程,需要在manifest中定义好Class-Path属性。
        3.对于双击.bat文件出现刷屏现象的情况,请直接把.bat文件的内容键入命令行执行。
        4.对于重复签名的jar包,在META-INF里面会出现多个签名文件,删除掉多余的,保存其中一个才能保证jws正常启动。

按照上面的步骤,我写了两个类,

iitshare类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

package git.iitshare.model; 

public class IitShare {
 
    privatestaticString siteName = "iitshare";
 
    publicstaticString getSiteInfo(String userName) {
        returnuserName +"hello, hello, welcome you to " + siteName
                +" website";
    }
 }



从上面我们可以看出此类在包:git.iitshare.model 下,类名为:IitShare,里面提供了一个静态方法:getSiteInfo(String userName), 返回一个字符串
我们将上面的类IitShare打包成jar文件,名称为iitshare.jar,具体的打包过程,如下:

1 生成IitShare.class文件,命令如下

JingjingdeMac-mini:~ jxiao$javac git/iitshare/model/IitShare.java

2 将IitShare.class 文件打包成jar ,命令如下:

JingjingdeMac-mini:~ jxiao$jar cvf IitShare.jar git/iitshare/model/IitShare.class

现在完成IitShare类的打包

注意:要把IitShare.class文件打包,而不是IitShare.java文件,否则会报错,CallIitShare.java:5: 错误: 找不到符号

 

 

        System.out.println(IitShare.getSiteInfo("itblood"));

CallIitShare类:

1
2
3
4
5
6
7

package com.iitshare.model;
 
public class CallIitShare {
    publicstaticvoid main(String[] args) {
        System.out.println(IitShare.getSiteInfo("itblood"));
    }
}

从上面调用代码中我们可以看出,调用代码的类名为:CallIitShare,执行后在控制台输出第三方jar包类IitShare中方法getSiteInfo的返回结果

创建menifest文件

在相同目录下创建menifest文件,文件内容如下:

Main-Class:git.iitshare.model.CallIitShare

Class-Path:iitshare.jar

将CallIitShare类和menifest文件进行打包

1 生成CallIitShare类的class文件

cmd 输入如下命令:

JingjingdeMac-mini:~ jxiao$ javac git/iitshare/model/CallIitShare.java

2 将CallIitShare.class和menifest文件打包,命令如下:

 

        jar cvmf menifest-CallIitShare CallIitShare.jar git/iitshare/model/CallIitShare.class

3 运行CallIitShare类,命令如下:

 

        java -jar CallIitShare.jar

结果:

 

  itbloodhello, hello, welcome you to iitshare website

注意

一定要把menifest文件的格式写正确,结尾空一行,”:“后有空格,否则会报错,我在运行过程中报出如下错误:

java.io.FileNotFoundException: menifest-CallIitShare (No such file or directory)

at java.io.FileInputStream.open(Native Method)

at java.io.FileInputStream.(FileInputStream.java:146)

at java.io.FileInputStream.(FileInputStream.java:101)

at sun.tools.jar.Main.run(Main.java:171)

 

at sun.tools.jar.Main.main(Main.java:1177)

原因分析:我的menifest文件 ”:”后没有加空格,所以报错。


0 0
原创粉丝点击