您的位置:首页 > 编程语言 > Java开发

java项目打包

2016-04-01 14:47 471 查看
1.项目不引用外部jar包,仅仅依赖于jdk相关jar包,则有两种解决方案 
    方案一、通过eclipse/myeclipse-->export-->java-->runnable JAR File, 
          按照提示选择Main方法,再下一步,最终生成jar文件;在cmd命令行下执行 
            java -jar XXX.jar即可 
 自己实践所得: eclipse/myeclipse-->export-->java-->runnable JAR File -->(选中)package required libraries into generated jar 
 (生成所需的库打包成jar) 
java -jar XXX.jar即可

   方案二、还是通过eclipse/myeclipse工具导出,但是不是导出jar文件,而是导出 
            包结构及class文件:export-->File System-->在这一步选择要导出的类 
            以及项目的配置文件还有lib目录(也就是项目需要的jar包)(这是关键的一 
            步,导出类时因为eclipse/myeclipse默认编译后的class文件在bin/包 
            路径/class文件,这里导出时不需要bin这个文件夹,把包路径和包下的 
            class文件一起导出。最后还应注意,比如我们的项目包都是以 
            com.project.xxx报下,而程序入口的main文件在 
            com.project.main包下,则cmd中执行java命令时应该进入到com包所在的 
            目录下,比如在classes目录下则cd classes,执行命令如下: 
            java com.project.main.Main 
  2.项目引用第三方jar包,并且需要在启动时读取配置文件           
            还是通过eclipse/myeclipse工具导出,但是不是导出jar文件,而是导出 
            包结构及class文件:export-->File System-->在这一步选择要导出的类 
            以及项目的配置文件还有lib目录(也就是项目需要的jar包)(这是关键的一 
            步,导出类时因为eclipse/myeclipse默认编译后的class文件在bin/包 
            路径/class文件,这里导出时不需要bin这个文件夹,把包路径和包下的 
            class文件一起导出,并保证和配置文件目录即lib目录同级,不这么做的话 
            在cmd命令下执行java 类名命令时会java.lang.NoClassDefFoundError 
            错误,即使代码没有任何问题的情况下也会报该异常)。最后还应注意,比如我 
            们的项目包都是以com.project.xxx报下,而程序入口的main文件在 
            com.project.main包下,则cmd中执行java命令时应该进入到com包所在的 
            目录下,比如在classes目录下则cd classes,执行命令如下: 
            java -Djava.ext.dirs=./lib com.project.main.Main 
          其中-D参数表示加载项目所需要的jar包即lib下所有*.jar 
          注意:加入配置文件在项目根目录/conf/目录下,那么就必须把conf文件夹 
                  放在和com包同一个目录下,并在代码中以conf/XXX来读取配置文件即 
                  可 
  3.补充说明 
    这里说明下为什么在项目有配置文件的时候没什么没有采用打jar包形式来导出项目。 
     因为如果采用打jar包的形式,则在jar在项目的时候相当于是负责配置加载的类需要 
     读取同一个jar包下的配置文件(读取资源文件同理),这对于项目完全可以修改的情况 
     下我们可以修改读取配置文件的方式为: 
    
  例: 
   【InputStream is=this.getClass().getResourceAsStream("/conf/res.txt");】  

    来读取配置问价或者资源文件;
    但是本分项目早已将加载资源文件的代码单独打为jar包,那么我们不能去修改原有 
     代码,那么“2”中的方法就比较有效了! 
三、扩展知识点(备忘) 
  1.可运行的jar文件和普通jar文件的区别在jar包中META-INFO/MANIFEST.MF 
    文件:其中可运行jar中指定了main方法所在类的位置,以及运行时所依赖的jar包 
   
Java代码 
例: 
  【 Rsrc-Class-Path: ./ commons-lang.jar 
   Class-Path: . 
   Rsrc-Main-Class: org.test.Main 
   Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 】 

  2.对于在某个包下的Main Class文件,在命令行下执行该类需要在根目录下执行 
   
Java代码 
例 
   【java com.project.main.Main】 

   命令,并且必须带包名,否则会报NoClassDefFoundError异常 
  3.java命令-D用来设置系统变量值;java.ext.dirs表示的是告诉虚拟机加载该路径下 
    所有的jar文件;ext.dirs指定的jar文件由extention classloader负责加载

三:用第三方插件  Fat Jar

四:http://www.cnblogs.com/mq0036/p/3885407.html  看到这篇文章,有第三方包可以直接生成,只不过第三方包放在项目根路径或者src目录下。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息