`
abccyz
  • 浏览: 17657 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何生成jar包

 
阅读更多

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

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

如:

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

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

<wbr></wbr>

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

jar cvf ibstool.jar * 回车

<wbr></wbr>

生成可执行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<wbr><span style="color:rgb(255,0,0)">(回车)</span></wbr>

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

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

<wbr></wbr>

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

<wbr></wbr>

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

<wbr></wbr>

<wbr></wbr>

网络引用:

java jar命令<wbr><br> 比如您的class包存放路径为 d:\com\demo(demo是个目录,下面含有子文件夹及class文件)<wbr><br><br> 具体操作如下:<wbr><br><br> 1、打开dos窗口,进入demo目录<wbr><br><br> cd d:\com\demo<wbr><br><br> 2、执行 jar cvf demo.jar * 回车<wbr><br><br> 3、在demo目录下面你会发现demo.jar<wbr><br><br> 具体参数请看下面的解释:<wbr><br><br> 用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名...<wbr><br><br> 选项:<wbr><br><br> -c 创建新的存档<wbr><br><br> -t 列出存档内容的列表<wbr><br><br> -x 展开存档中的命名的(或所有的〕文件<wbr><br><br> -u 更新已存在的存档<wbr><br><br> -v 生成详细输出到标准输出上<wbr><br><br> -f 指定存档文件名<wbr><br><br> -m 包含来自标明文件的标明信息<wbr><br><br> -0 只存储方式;未用zip压缩格式<wbr><br><br> -M 不产生所有项的清单(manifest〕文件<wbr><br><br> -i 为指定的jar文件产生索引信息<wbr><br><br> -C 改变到指定的目录,并且包含下列文件:<wbr><br><br> 如果一个文件名是一个目录,它将被递归处理。<wbr><br><br> 清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和'f'标志指定的相同顺序。<wbr><br><br> 示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中:<wbr><br><br> jar cvf classes.jar Foo.class Bar.class<wbr><br><br> 示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有文件存档到一个名为'classes.jar' 的存档文件中:<wbr><br><br> jar cvfm classes.jar mymanifest -C foo/ .<wbr><br><br><br> 来个小例子试试看:<wbr><br><br> 我们只有一个HelloWorld,如下:<wbr><br><br> public class HelloWorld{<wbr><br> public static void main(String[ ] args){<wbr><br> System.out.println(“Hi, Hello World!”);<wbr><br> }<wbr><br> }<wbr><br><br> 将这个java文件存到C盘跟目录下,ok,接下来,<wbr><br><br> 在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvfhello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar。<wbr><br><br> 基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。<wbr><br> 紧接着我们看看如何运行我们的jar包。<wbr><br><br> 在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看:<wbr><br><br> Manifest-Version: 1.0<wbr><br> Created-By: 1.4.2 (Sun Microsystems Inc.)<wbr><br><br><br> 就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld(在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即,<br><br> Manifest-Version: 1.0<wbr><br> Created-By: 1.4.2 (Sun Microsystems Inc.)<wbr><br> Main-Class: HelloWorld<wbr><br><br> 接下来,我们在命令提示符里执行:<wbr><br><br> jar umf MANIFEST.MF app.jar (应该是hello.jar吧)<wbr><br><br> 这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class:HelloWorld这一句。(是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?)<wbr><br><br> Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入:<wbr><br><br> java -jar hello.jar(执行)<wbr><br><br><br> 出现了什么, Hi, Hello World!<wbr><br><br> 我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:<wbr><br><br> 先准备我们要打包的资源。<wbr><br><br> 找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

关于 MANIFEST.MF写法.

<wbr></wbr>

<wbr></wbr>

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

Manifest-Version: 1.0

Main-Class: windows.VideoWindow

Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jarlib\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方法进入. 否则没有相关连接包,则会提示找不到mainclass. 而大家可能还迷糊的找不到北. 明明有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里面.必须写上你要使用的类.否则总会提示您编译出错.

<wbr></wbr>

可以用的上的有:

<wbr></wbr>

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

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

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

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

Manifest-Version: 1.0
Main-Class: ui.JFrameMain
Class-Path: jtds-1.2.jar c3p0-0.9.1.2.jar<wbr><br> esri_mo20.jar esri_mo20res.jar jsde83_sdk.jar</wbr>

解释一下:

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

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

Class-Path 用到的一些包

分析一下要点:

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

也就是说务必写为:

Main-Class:(空格)YouClassName

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里边的内容用空格分隔而不是逗号或者分号。(唉。。。我总是下意识的用分号)

也就是说务必写成:

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这种异常。

分享到:
评论

相关推荐

    eclipse生成jar包

    Eclipse作为一个流行的Java集成开发环境(IDE),提供了方便的工具来生成JAR包。本文将详细介绍如何在Eclipse中生成包含外部依赖的JAR包。 首先,我们来看如何生成不包含外部依赖的普通JAR包。如果一个Java类包含...

    android 将项目生成jar包Demo

    首先,我们有两个关键工程:一个是生成JAR包的工程,另一个是用于测试JAR包的工程。这两个工程都在名为"jarDemo"的压缩包内。生成JAR包的工程通常包含了我们想要封装的功能或组件,而测试工程则用来验证JAR包的功能...

    Android studio和Eclipse分别生成jar包并混淆jar包的demo

    安装后,在导出jar包前运行混淆工具,并根据需要配置混淆规则。 混淆jar包在Eclipse中的过程与Android Studio类似,也需要编写ProGuard规则,并在导出jar前进行混淆。 总的来说,Android Studio和Eclipse都提供了...

    Eclipse导出Jar包

    Eclipse导出Jar包 Eclipse 是一个功能强大且广泛应用的集成开发环境(IDE),它支持多种编程语言,包括 Java。Java 是一种流行的编程语言,广泛应用于 Android 应用程序开发、Web 应用程序开发和企业级应用程序开发...

    生成JAR包的方法(打包后运行好像不快)

    ### 生成JAR包的方法与优化运行速度 #### 标题理解: - **标题**:“生成JAR包的方法(打包后运行好像不快)”:该标题指出文章将介绍如何生成Java应用程序的JAR包,并提到打包后的程序运行速度较慢的问题。 #### ...

    poi.jar导入导出jar包

    【标题】"poi.jar导入导出jar包"指的是Apache POI项目提供的Java库,主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个jar包是开发人员在Java环境中进行读写Excel文档时必不可少的工具。 ...

    生成jar包步骤

    ### 生成JAR包步骤详解 #### 一、引言 在Java开发中,将项目打包成JAR(Java Archive)文件是一种常见的做法。JAR文件不仅方便部署和分发,还能有效地组织类文件和资源文件。本文将详细介绍两种常用的生成JAR包的...

    Android Studio 生成JAR包和调用JAR包方法 demo

    3. **导出JAR包**: 在Android Studio中,选择菜单栏的`Build` -&gt; `Generate Signed Bundle / APK`。在弹出的对话框中,选择`APK`选项,然后点击`Next`。在下一个界面,选择`Release`模式并继续。 4. **配置签名**: ...

    excle导出jar包

    标题中的“excle导出jar包”指的是将Excel数据转换为Java可执行的JAR文件。Excel是一种广泛使用的电子表格程序,通常用于处理数据、计算和制作图表。在IT行业中,有时我们需要将Excel数据整合到Java应用程序中,或者...

    eclipse导出jar包

    ### Eclipse导出JAR包详解 #### 一、前言 在Java开发过程中,经常会遇到将项目打包成可执行的JAR文件的需求。这不仅便于程序的发布与分发,还能帮助开发者更好地管理项目的依赖关系。Eclipse作为一款广泛使用的...

    android gradle导出jar包,并包含assets资源文件夹

    本demo是结合博客的资源,如有不懂请去看博客 http://blog.csdn.net/u013895206 ,文章是:android 使用gradle导出jar包,并包含assets资源文件夹。谢谢!

    生成JAR包及包的运行.doc

    以下是生成JAR包及其运行的相关知识点: 1. **JAR命令**: - `jar` 命令是Java SDK自带的一个工具,用于创建、更新和提取JAR文件。 - 参数 `cvf` 分别代表 `c` (create)、`v` (verbose) 和 `f` (file),用于创建...

    kaptcha验证码生成jar包后台配置源代码

    kaptcha验证码生成jar包后台配置源代码 kaptcha生成验证码的作用:进行人机校验--防止机器脚本自动大量注册用户。 1、Kaptcha是谷歌开源的可高度配置的实用验证码生成工具。 2、过Kaptcha可阻拦大多数机器人脚本...

    mybatis配置文件生成jar包

    本教程将详细解释如何生成包含MyBatis配置文件的JAR包,并在命令行环境中运行该JAR包来生成Mapper配置。 首先,理解MyBatis的核心组件和配置文件: 1. **mybatis-config.xml**:这是MyBatis的全局配置文件,包含了...

    ant导出jar包例子

    本篇文章将详细讲解如何使用Ant来导出JAR包,以及通过一个简单的`build.xml`文件示例来演示这一过程。 首先,让我们了解Ant的基本结构。一个Ant项目的核心是`build.xml`文件,它是Ant任务的配置文件,包含了项目...

    android studio导出jar包工具

    由于android studio不像eclipse一样自带有jar包导出功能,如果手动修改工程脚本文件来生成jar包既费时又费力,因此开发此款工具以第三方工具的形式导入到studio中,实现与eclipse一样的功能,连操作方式也一样,软件...

    简单验证码生成jar包

    这个“简单验证码生成jar包”提供了一个便捷的解决方案,帮助开发者在他们的应用中集成验证码功能。一个`.jar`文件是Java应用程序的归档文件,它可以包含代码、资源文件和元数据。`code_kyle_1.1.jar`很可能是这个...

    android studio 生成Jar包并调用资源文件

    使用android studio生成jar包,并且使用映射来完美调用资源文件。包含两个工程,一个如何生成jar包,一个是如何使用jar包,调用资源文件。使用详情可以关注我的blog,http://blog.csdn.net/jujishou521

    axis2客户端生成java代码的jar包以及依赖jar包

    本主题将深入探讨如何使用Axis2生成客户端Java代码的jar包,以及这些jar包的依赖关系,以便在实际应用中正确引用。 一、Apache Axis2简介 Apache Axis2是Apache SOAP(简单对象访问协议)实现的第二代产品,它提供...

Global site tag (gtag.js) - Google Analytics