java 命令行eclipse_在命令行中运行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.xx包下,而程序入口的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.gtClass().getResourceAsStream("/conf/res.txt");

来读取配置问价或者资源文件;但是本分项目早已将加载资源文件的代码单独打为jar包,那么我们不能去修改原有代码,那么“2”中的方法就比较有效了!

三、扩展知识点

1.可运行的jar文件和普通jar文件的区别在jar包中META-INFO/MANIFEST.MF文件:其中可运行jar中指定了main方法所在类的位置,以及运行时所依赖的jar包

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 com.project.main.Main

内容来自1jquery

命令,并且必须带包名,否则会报NoClassDefFoundError异常

3.java命令-D用来设置系统变量值;java.ext.dirs表示的是告诉虚拟机加载该路径下所有的jar文件;ext.dirs指定的jar文件由extention classloader负责加载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值