Java程序打包jar文件(jar命令形式)
先打开命令提示符,输入jar,然后回车(如果你已经配置好了java环境),可以看到:
用法: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' 的存档文件中:
jarcvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件'mymanifest' 将 foo/ 目录下的所有文件存档到一个名为'classes.jar' 的存档文件中:
jarcvfm classes.jar mymanifest -C foo/.
来个小例子试试看:我们只有一个HelloWorld,如下:
publicclass HelloWorld {
public static void main(String[ ] args) {
System.out.println(“Hi, Hello World!”);
}
}
将这个java文件存到C盘根目录下,ok,接下来,在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javacHelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错hello.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 hello.jar
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class:HelloWorld这一句。
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应用。
这是HelloWorld.java:
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclass 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("");
}
}//end here!
对它编译。下面是web.xml:
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPEweb-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.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>
在命令提示符下进到先前创制的hello目录下,执行jar cvf hello.war * ,我们便得到hello.war。将它拷贝至webapps目录下,ok,来看最后一步,打开tomcat的目录conf中的server.xml,加入:
<Contextpath="/hello" docBase="hello.war" debug="0"reloadable="true"/>
大功告成!运行它,启动tomcat,后在浏览器中输入http://localhost:8080/hello/HelloWorld。
Java程序打包jar文件(Eclipse自带Export)
使用eclipse开发工具,可以将java程序直接导出成jar程序文件,eclipse的export功能。
1、选中需要打包的程序,鼠标右键:
2、选择导出类型为jar文件:
3、选择需要打包的文件,并不需要将所有的文件都打包,这样可以减小jar文件的大小。并且可以选择导出jar包的一些信息,其解释如下:
*Export generated class files and resources 表示只导出生成的.class文件和其他资源文件;
*Export all output folders for checked projects 表示导出选中项目的所有文件夹;
*Export java source file and resouces 表示导出的jar包中将包含你的源代码*.java,如果你不想泄漏源代码,那么就不要选这项了;
*Export refactorings for checked projects 把一些重构的信息文件也包含进去。
这里需要对MANIFEST.MF进行说明,这是打包的主清单文件,每个项目打包之后都会生成一个META-INF目录,里面还有一个MANIFEST.MF文件。在eclipse中如果打包的程序没有引用第三方jar文件,则可以使用默认配置生成(当然你还是可以自己写,并说明程序执行的入口文件,若有的话)若项目使用了第三方jar包,则需要自己编写MANIFEST.MF文件:
Manifest-Version: 1.0
Class-Path: lib/mysql-connector-java-5.1.6-bin.jar
Main-Class: com.zxt.sqlhelper.SqlHelperTest
第一行是MAINIFEST的版本,第二行Class-Path就指定了外来jar包的位置,第三行指定我们要执行的MAINjava文件。
还需注意一下一些问题:
(1)、Class-Path:和Main-Class: 后边都有一个空格,必须加上,否则会打包失败,错误提示为:Invalid header field;
(2)、假设我们的项目打包后为Hello.jar,那么按照上面的定义,应该在 Hello.jar的同层目录下建立一个lib文件夹(即lib文件和打包的jar文件在同一个目录下),并将相关的jar包放在里面。否则将会出现“Exceptionin thread "main" java.lang.NoClassDefFoundError”的错误;
3、Main-Class后面是类的全地址,比如你的主文件是Hello.java,文件里打包为packagecom.main; 那么这里就写com.main.Hello,不要加.java后缀,主文件地址写错将会出现“找不到或无法加载主类”的错误;
4、写完Main-Class后一定要回车(即最后一行是空白行),让光标到下一行,这样你生成的jar包才能找到你的主class去运行,否则将会出现“jar中没有主清单属性”的错误。
4、选择配置文件:
这里解释一下配置项:
*Generate the manifest file:是系统帮我们自动生成MANIFEST.MF文件,如果你的项目没有引用其他class-path,那可以选择这一项。
*Use existing mainfest from workspace:这是可以选择我们自定义的.MF文件,格式如上所写,引用了第三方包时选用。
*Seal content:要封装整个jar或者指定的包packet。
*Main class:这里可以选择你的程序入口,将来打包出来的jar就是你这个入口类的执行结果。
5、最后Finish,即生成了我们要的jar文件。
Java程序打包jar文件(Eclipse安装插件FatJar)
Eclipse自带export对于含有较多第三方jar文件或含有第三方图片资源等就显得不合适,太繁琐。这时可以使用一个打包的插件—FatJar。
FatJar Eclipse Plug-In是一个可以将Eclipse Java Project的所有资源打包进一个可执行jar文件的小工具,可以方便的完成各种打包任务,我们经常会来打jar包,但是eclipse自带的打包jar似乎不太够用,FatJar是eclipse的一个插件,特别是Fat Jar可以打成可执行Jar包,并且在图片等其他资源、引用外包方面使用起来更方便。
安装方法:
1、Eclipse在线更新方法:Help> Install New Software > Add,
name:FatJar
location:http://kurucz-grafika.de/fatjar
2、Eclipse插件手动安装方法:首先先下载fatjar的安装包,将解压出的plugins中的文件复制到eclipse安装目录中的plugins目录下,然后重启eclipse即可。
使用方法:
步骤一:右击工程项目选择BuileFat Jar
步骤二:配置jar文件存放目录,主Main文件等,如下图:
步骤三:选择所要用到的第三方jar包。