`
jackie_yzw
  • 浏览: 4203 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【转载】将.class文件生成jar可执行文件

阅读更多

进入dos操作符窗口

cd进入要打成jar包的class文件所有文件夹目录

jar cvf [生成jar的名称.jar] [列出class文件] //若有多个,以空隔隔开

如:

一。操作零散的单个或几个class文件

jar cvf ibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class


二。把一个文件夹下面的所有class文件打成jar包

jar cvf ibstool.jar * 回车


生成可执行jar包:

编译的class文件中必须有main入口函数的类方能生成可执行jar包,如:

public static void main(String[] args)

生成的方法步骤:

方法一:

1。用上面的方法把class与相应的结构目录打成jar包

2。解压这个jar包到当前目录

3。编辑META-INF/MANIFEST.MF,给jar包指定程序入口main函数,内容为:

Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
Main-Class: MutiThread (回车)

(注意回车与空格,这个文件的内容排版必须标准)

4。再用winzip把这些文件压缩成jar格式包,或者压成zip包,再改后缀名为jar也可。


方法二(推荐):
2. 打成可执行的jar包
cmd操作窗体中进入class文件的根目录,之所以说根目录,是因为下面其下面还可以有很多文件包(夹);
在此目录准备好一个manifest.mf文件,其内容为:
Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
Main-Class: MainEntry


main-class为指定所有类的main方法所在的类名.
最后用命令: jar cvfm jarname.jar manifest.mf *

3.测试可执行jar包.
用命令:java -jar jarname.jar

4.为可执行jar包制作bat文件.
例如 :
@echo off
rem
rem Set BQ_IBS_HOME before running this script.
rem

if not "%BQ_IBS_HOME%" == "" goto CONT0
set BQ_IBS_HOME=c:\ibs
:CONT0

@echo on
java -DBQ_IBS_HOME=%BQ_IBS_HOME% -jar jarname.jar

:END



网络引用:

java jar命令 
比如您的class包存放路径为 d:\com\demo (demo是个目录,下面含有子文件夹及class文件) 

具体操作如下: 

1、打开dos窗口,进入demo目录 

cd d:\com\demo 

2、执行 jar cvf demo.jar * 回车 

3、在demo目录下面你会发现demo.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/ . 


来个小例子试试看: 

我们只有一个HelloWorld,如下: 

public class HelloWorld{ 
public static void main(String[ ] args){ 
System.out.println(“Hi, Hello World!”); 



将这个java文件存到C盘跟目录下,ok,接下来, 

在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。 

基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。 
紧接着我们看看如何运行我们的jar包。 

在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看: 

Manifest-Version: 1.0 
Created-By: 1.4.2 (Sun Microsystems Inc.) 


就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即, 

Manifest-Version: 1.0 
Created-By: 1.4.2 (Sun Microsystems Inc.) 
Main-Class: HelloWorld 

接下来,我们在命令提示符里执行: 

jar umf MANIFEST.MF app.jar (应该是hello.jar吧) 

这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。 (是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?) 

Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入: 

java -jar hello.jar(执行) 


出现了什么, Hi, Hello World! 

我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的: 

先准备我们要打包的资源。 

找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。


关于 MANIFEST.MF 写法.


例如我们打包的jar为 Test.jar

Manifest-Version: 1.0

Main-Class: windows.VideoWindow

Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar

上面为打包为jar中的包说明文件. 下面这个报错一直出现.

could not find main class. Program will exit

这个错误提示其实不是没有发现main class. 而是jar如果有错误执行不了,就会出现这个错误. 打包完成后, 要先运行 cmd -> java -jar your.jar 确认没有问题即可执行jar. 使用-jar参数后, 系统的Classpath 变量不再起作用. 虚拟机将去MANIFEST.MF中的Class-Path 下找相关的包.

然后才能成功的从: windows.VideoWindow 的main方法进入. 否则没有相关连接包,则会提示找不到main class. 而大家可能还迷糊的找不到北. 明明有main class吗.

如果这个写的不对. 则就会一直报错.

看看上面这个Class-Path: 后面的写法. 空格分开. 绝对不能有分号.切记.

最后必须有换行. 这个也是要注意的. 否则依然提示没有mainclass.

不要因为这个小事情耽误了时间. 其中 lib/ 表示这个jar必须在打包Test.jar所在目录的一个lib子目录中.

运行jar需要命令: java -jar Test.jar

双击也可以, 则使用 javaw 打开.

关于java -classpath a.jar;b.jar; class test.Test 执行时. a.jar;b.jar; 后面都必须有分号. 否则报错. 不要指望不写classpath让系统自己找. 这不是在eclipse里面.必须写上你要使用的类. 否则总会提示您编译出错.


可以用的上的有:


    1. Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序。

    2. Class-Path 指定jar包的依赖关系,class loader会依据这个路径来搜索class。

我平时用mf文件一般说来都是让jar成为可以直接运行这一目的。虽然目的这么简单,但是每次打包还是很容易出现各种各样的问题让人头痛。mf总是没有被应用,或者是出错了。

首先给出一个简单而标准的例子:

Manifest-Version: 1.0
Main-Class: ui.JFrameMain
Class-Path: jtds-1.2.jar c3p0-0.9.1.2.jar 
esri_mo20.jar esri_mo20res.jar jsde83_sdk.jar

解释一下:

Manifest-Version mf文件版本号,这行照抄

Main-Class 包含main函数的类,程序的入口

Class-Path 用到的一些包

分析一下要点:

要点1:每行的“:”(冒号)用来分隔键值对。冒号后边一定要跟一个空格!!!

也就是说务必写为:
  1. Main-Class空格)YouClassName

  2. Class-Path空格)Class1.Jar
复制代码
否则JBuilder会报("Manifest.mf": Error reading manifest: java.io.IOException: invalid header field
)这样的错。不再IDE帮助下做的JAR会发现MF没有起到应有的作用。顺便说一下以前我看到JBuilder报另一个个错大概说是什么换行符不对,好像也是由于这个问题引发的。原先总以为是windows里边的回车是由回车,换行2个字符构成而造成的。现在看来好像不是这样,是因为少了冒号后边那个空格。

要点2:Class-Path里边的内容用空格分隔而不是逗号或者分号。(唉。。。我总是下意识的用分号)

也就是说务必写成:
  1. Class-Path空格)Class1.jar(空格)Class2.jar(空格)Class3.Jar
复制代码
要点3:有的文章说MF文件每行不能超过七十多的字符,我的经验是如果在JBuilder里编辑MF超过了也无妨,一般我是尽量一行写完。续行挺麻烦又要以空格开头什么的。我也经常直接用winRar打开jar然后直接编辑里边的mf文件,这是个好方法,很直接了当,缺点就是如果改坏了也不会报错,只是MF有的部分失效了,好像运行时也会说"错误的MF文件版本"。

介绍几个技巧:

技巧1:使用winRar打开jar,双击MF文件,就可以编辑了,编辑完了Ctrl+S保存。特方便。也可以在外边写好一个Manifest.mf,然后直接拖入覆盖以前的。

技巧2:写一个run.bat来运行你的jar。run.bat大体内容如下:

java -jar yours.jar

pause

后边加一个pause就可以让你看到具体哪里出错了,一般来说问题如果出在MF上,那么往往就是哪个包,哪个类没有找到的NoClassDef这种异常。

1
0
分享到:
评论

相关推荐

    Java反编译工具把.class文件转换为.java文件

    - 解压后会得到两个文件:一个是可执行文件(名为`jad.exe`,适用于Windows系统;或名为`jad`,适用于*nix系统),另一个是此README文件。无需进行额外设置即可使用。 2. **基本使用**: - 使用命令行界面调用Jad...

    么把.class文件反编译成.java 经修改后再编译成.class

    最后,点击 Eclipse 菜单中的文件→导出→Java→可运行的 JAR 文件,选择配置工程和导出路径,然后点完成即可导出。 五、反编译技术的应用 反编译技术有多种应用场景,例如: * 调试和错误排查:可以使用反编译...

    用于反编译jar为JAVA代码java -jar cfr-0.152.jar xx.jar -outputdir 路径

    Java是一种广泛使用的编程语言,它的可执行文件通常是以.jar(Java Archive)格式打包的,包含了编译后的字节码。这些字节码是人类不可读的,为了理解.jar文件内部的工作原理或者进行代码分析,我们需要将字节码反...

    jar 反编译.class文件 XJad

    1. **获取XJad工具**:首先需要找到XJad的安装包或可执行文件,这可能需要在网络上搜索或者从旧的软件资源库中下载。 2. **解压JAR文件**:使用解压工具将JAR文件内容提取出来,以便单独处理每个.class文件。 3. **...

    class如何生成jar

    ### 如何将 `.class` 文件生成为 `.jar` 文件及执行方法 在Java开发中,`.jar` 文件(Java归档文件)是一种重要的打包格式,它不仅能够将多个 `.class` 文件封装在一起,还能包含资源文件和其他元数据,使得应用...

    如何生成可执行jar文件

    在Java编程环境中,生成可执行JAR(Java Archive)文件是一项常见的任务,它允许我们将类文件、资源和其他依赖项打包成一个独立的可执行文件。这样,用户无需安装Java环境,只需双击JAR文件即可运行程序。以下是生成...

    把.class用jar工具打包成可执行程序.doc

    Java 语言中,将多个 `.class` 文件打包成可执行的 JAR(Java ARchive)文件是一项常见的任务,这有助于简化程序的分发和执行。JAR 文件不仅能够将多个类文件组合在一起,还可以包含资源文件、元数据以及一个重要的...

    生成可执行jar文件的教程

    在Java开发过程中,经常需要将项目打包成可执行的JAR文件,以便于分发和部署。本教程将详细介绍如何通过CMD命令行生成一个可执行的JAR文件。 #### 二、准备工作 在开始之前,请确保您的开发环境已经安装了Java JDK...

    通过jar命令生成可执行的jar文件

    通过jar生成可执行的jar文件 将您要打包成jar的class文件放到D盘的temp目录下(也可以自定义) 在cmd命令行中键入如下指令: 1. 进入temp目录:cd tmep 2. 输入打包jar命令:jar -cvfe test.jar JFrameDemo3 . (点...

    好用的Dex to jar 以及.class文件阅读器

    jd-gui适用于Windows、Linux和Mac OS等操作系统,只需运行对应版本的可执行文件,然后加载你需要查看的类文件即可。 在实际操作中,我们通常先使用dex2jar将.dex文件转换成.jar文件,然后再用jd-gui打开.jar文件...

    如何生成jar包

    生成JAR包是Java项目打包的一种常见方式,它用于将多个.class文件及相关资源文件打包成一个文件,便于程序的分发和部署。JAR文件的全称是Java Archive,本质上是一个ZIP格式的压缩文件,包含了一个清单文件...

    java中生成exe文件 jar打包成可执行文件

    在Java开发环境中,有时我们需要将Java程序转换为可被非Java环境执行的程序,例如Windows下的.exe可执行文件。这通常是为了方便用户直接运行而无需安装Java运行环境。本篇文章将详细讲解如何在Java中生成.exe文件,...

    Java入门-生成可执行jar文件的教程

    ### Java入门:生成可执行JAR文件的详细教程 #### 标题与描述解析 本教程旨在引导初学者了解如何生成可执行的...通过以上详细的步骤介绍,读者可以轻松地掌握如何生成可执行的JAR文件,并将其应用到实际的项目中去。

    java动态编译指定java文件且将java文件生成jar

    在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...

    将java程序打包成“可执行”文件示例

    Java 程序打包成可执行文件示例是指将 Java 程序编译成.class 文件,然后将其打包成一个可执行的.jar 文件,最后可以使用工具将其转换成.exe 文件。下面是详细的步骤和知识点: 首先,我们需要编写 Java 程序。这里...

    制作可执行的JAR文件包及jar命令详解.doc

    Java Archives(JAR)文件是一种Java特有的文档格式,类似于ZIP文件,但包含了一个META-INF/MANIFEST.MF文件,该文件是在生成JAR文件时自动创建的。JAR文件可以包含Java类、图片、音频、视频等多种类型的文件。 ...

    java利用exe4j生成exe可执行文件.doc

    在本例中,需要将可执行 jar 文件和第三方类库添加到 Class Path 下。 知识点五:捆绑 JRE 在 exe4j 中,可以捆绑 JRE,以便在客户机上可以正确地运行程序。可以选择捆绑的 JRE 版本号,并指定 JRE 的文件夹。 ...

    JCreator生成.jar文件&&java生成exe文件参照.pdf

    在这里可以选择要生成的可执行文件的类型、生成的可执行文件名称、可执行文件的图标等,可以根据需要选择。 在下一步,可以选择要生成的可执行文件的类型,例如选择“GUI application”或“console application”,...

    Java文件转换为 Exe 可执行文件

    软件功能为:将 Jar 文件转换为 Exe 可执行文件。 生成的 Exe 文件在执行时,需要 JRE(Java Runtime Environment)。 2. 用法及举例 本软件在控制台下运行,格式: D:\>J2E <jarfile> /m <mainclass> 说明: jar...

Global site tag (gtag.js) - Google Analytics