在命令行中运行eclipse中建立的java项目

因为项目要求,须要对eclipse中的项目进行打包,似的能够在客户机上不装eclipse的状况下正常运行。
一.环境说明:
   eclipse---3.5
   jdk-------1.6.0.22
   os--------xp,win7
二.解决方案详情:
   1. 项目不引用外部jar包,仅仅依赖于jdk相关jar包,则有两种解决方案
     方案1、经过eclipse/myeclipse-->export-->java-->runnable JAR File,
           按照提示选择Main方法,再下一步,最终生成jar文件;在cmd命令行下执行
             java -jar XXX.jar便可

     方案2、仍是经过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包下的配置文件(读取资源文件同理),这对于项目彻底能够修改的状况
      下咱们能够修改读取配置文件的方式为:
     
Java代码 复制代码  收藏代码
  1. InputStream is=this.getClass().getResourceAsStream("/conf/res.txt");    
     InputStream is=this.getClass().getResourceAsStream("/conf/res.txt"); 
     

     来读取配置问价或者资源文件;
     可是本分项目早已将加载资源文件的代码单独打为jar包,那么咱们不能去修改原有
      代码,那么“2”中的方法就比较有效了!
3、扩展知识点(备忘)
   1.可运行的jar文件和普通jar文件的区别在jar包中META-INFO/MANIFEST.MF
     文件:其中可运行jar中指定了main方法所在类的位置,以及运行时所依赖的jar包
    
Java代码 复制代码  收藏代码
  1. Rsrc-Class-Path: ./ commons-lang.jar   
  2. Class-Path: .   
  3. Rsrc-Main-Class: org.test.Main   
  4. Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader   
    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代码 复制代码  收藏代码
  1. java com.project.main.Main   
     java com.project.main.Main
    
    命令,而且必须带包名,不然会报NoClassDefFoundError异常    3.java命令-D用来设置系统变量值;java.ext.dirs表示的是告诉虚拟机加载该路径下      全部的jar文件;ext.dirs指定的jar文件由extention classloader负责加载
相关文章
相关标签/搜索