Java程序打包成jar文件 - Go语言中文社区

Java程序打包成jar文件


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包。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zengxiantao1994/article/details/78838161
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 19:27:01
  • 阅读 ( 1843 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢