Java打jar包并运行实践

来源:互联网 发布:unity3d click 编辑:程序博客网 时间:2024/06/05 16:55

一直知道编写完java程序之后javac 编译,然后java运行class文件。之后还可以将程序打包成jar包,也就是归档文件,第三方的类库不都是以jar包的形式出现的嘛,今天实践了一下还不是一下就成,说明还是有很多东西不清楚,也说明了实践的重要性,一个知识知道了并不代表你会了,你觉的会了不一定是真的会了。一些博客写出来的要经过自己 的验证。

闲话少说,开整。


首先写一个最最最简单的java程序:

public class JarTest {public static void main(String[] args) {System.out.println("Hello World I'm Jaring !");}}

然后javac JarTest.java 编译

然后java JarTest 运行,是没问题的。


下面就开是打包:

直接运行jar命令会得到如下的帮助:

用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -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/ .


然后我学习了这篇博客的文章:http://blog.sina.com.cn/s/blog_93d133c601013hdm.html


内容如下:

一、打包成一般的jar包

输入如下命令即可:

Cmd代码 复制代码 收藏代码
  1. jar cvf counter.jar -C bin  

其中,“-C bin”实际上是告诉jar命令先cd到bin目录下,再在此目录执行没有参数“-C bin”的命令,等价于:

 

Cmd代码 复制代码 收藏代码
  1. cd bin   
  2. jar cvf counter.jar // "."代表当前路径  
 

二、打包成可运行的jar包

要打包成可运行的jar包,有两种方法,一是手动创建MANIFEST.MF文件,并在其中指定主类;二是使用jar的-e参数指定可运行jar包的入口点(即main类的完全名称).

以Java源代码行数统计程序的打包为例,演示如何打包:

1. 手动创建MANIFEST.MF文件:

1)首先编辑MANIFEST.MF文件,内容如下:

Mf代码  收藏代码复制代码
  1. Manifest-Version: 1.0  
  2. Created-By: rsljdkt   
  3. Class-Path: .   
  4. Main-Class: Main  

 

说明:

  第一行指定清单的版本,若无,则JDK默认生成:Manifest-Version: 1.0

  第二行指明创建的作者,若无,则JDK默认生成Created-By: 1.6.0_22(Sun Microsystems Inc.)

  第三行指定主类所在类路径,

  第四行指明程序运行的主类

2)使用jar命令进行打包:

Cmd代码 复制代码 收藏代码
  1. jar cvfm counter.jar MANIFEST.MF -C bin  

 说明:

  参数f:指定打包后的包名。

  参数m:指定自定义的MANIFEST.MF清单文件,否则,JDK会自动生成不包含Main-Class的默认清单。

  参数c:指定是创建新的归档文件。

  参数v:在标准输出中生成详细输出,该选项是可选的。

 

2. 使用-e参数指定入口点:

执行如下命令即可:

 

Cmd代码 复制代码 收藏代码
  1. jar cvfe counter.jar Main -C bin  
 

 

方法二:使用Eclipse的Export功能:

一、打包成一般的jar包:

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> JAR File,然后点击next按钮

  3)在JAR File Specification窗口中,设置打包成的文件名和存放位置,点击两侧next

  4)在JAR Manifest Specification窗口中,设置MANIFEST.MF清单文件的配置,

    若仅仅打包成单纯的jar包的话,不用做任何修改,采取默认即可

    若打包成可执行jar包的话,可以使用已存在的MANIFEST文件或者直接选择Main class

  5)点击Finish按钮,完成打包。

二、打包成可运行的jar包

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> Runnable JAR File,然后点击next按钮

  3)在Runnable JAR File Specification窗口中,选择Launch configuration和Export destination

  4)点击Finish按钮,打包完成。



具体步骤:

也就是说打包总的来说有两种方式自己动手java命令行,还有就是使用工具比如说eclipse。

我选择第一种。每一种又分为两种打成一般的jar包, 打成可以运行的jar包,显然果断后者呀~~~

ok,选择好了目的,又有两中选择,半自动和自动,当然选择自动,复制博主代码

在我的D:\java\javacodes 下面执行 jar -cvfe jarTest.java Main bin .

果然打包了,java -jar jarTest.jar 报错:“找不到或无法加载主类 Main”

百度一下:看到这篇文章:http://www.cnblogs.com/adolfmc/archive/2012/10/07/2713562.html

心急如焚也没怎么仔细看,我觉得就是路径呀 类名写的不对。

看了一下手动打包的方案,知道有一个配置文件。再仔细看文章恍然大悟,博主默认将jar打到bin目录里当然是不行的 ,而且我的类名也不是main呀!!!



所以修改我的打包命令:

jar -cvfe JarTest.jar ./(这里要写你的源代码的位置,要不就自己手动配置,你看这办把) .   


运行 java -jar JarTest.java

"Hello World I'm Jaring !"

好了,究其原因还是基础不熟,对运行原理不清楚,对java命令行也不清楚。


0 0
原创粉丝点击