zoukankan      html  css  js  c++  java
  • 在命令行中运行eclipse中创建的java项目

    由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情况下正常运行。
    一.环境说明:
       eclipse---3.5
       jdk-------1.6.0.22
       os--------xp,win7
    二.解决方案详情:
       1.项目不引用外部jar包,仅仅依赖于jdk相关jar包,则有两种解决方案
         方案一、通过eclipse/myeclipse-->export-->java-->runnable JAR File,
               按照提示选择Main方法,再下一步,最终生成jar文件;在cmd命令行下执行
                 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包下的配置文件(读取资源文件同理),这对于项目完全可以修改的情况
          下我们可以修改读取配置文件的方式为:
         
    Java代码 复制代码 收藏代码
    1. InputStream is=this.getClass().getResourceAsStream("/conf/res.txt");    
         InputStream is=this.getClass().getResourceAsStream("/conf/res.txt"); 
         

         来读取配置问价或者资源文件;
         但是本分项目早已将加载资源文件的代码单独打为jar包,那么我们不能去修改原有
          代码,那么“2”中的方法就比较有效了!
    三、扩展知识点(备忘)
       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负责加载
  • 相关阅读:
    浅析Vue3相关基础知识:Vue3应用配置、重写的vmodel、emits 选项、getCurrentInstance()获取实例、采用mitt实现全局通讯、vuerouter的新特性
    Vue3结合TS项目开发实践:Composition API的风格理念、关注点分离、如何组织TS进行项目开发(采用声明文件来管理接口及所需类型/目录结构推荐)
    TypeScript类型守卫、联合类型、交叉类型
    Android开发历程_14(广播机制)
    OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)
    OpenGL_Qt学习笔记之_06(纹理滤波、光照和色彩融合)
    Qt学习之路_12(简易数据管理系统)
    特征点检测学习_2(surf算法)
    Kinect+OpenNI学习笔记之2(获取kinect的颜色图像和深度图像)
    PCA算法学习_1(OpenCV中PCA实现人脸降维)
  • 原文地址:https://www.cnblogs.com/langtianya/p/3172258.html
Copyright © 2011-2022 走看看