在命令行中运行eclipse中创建的java项目
一.环境说明:
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包下的配置文件(读取资源文件同理),这对于项目完全可以修改的情况
下我们可以修改读取配置文件的方式为:
- 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包
- Rsrc-Class-Path: ./ commons-lang.jar
- Class-Path: .
- Rsrc-Main-Class: org.test.Main
- 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 com.project.main.Main
java com.project.main.Main
命令,并且必须带包名,否则会报NoClassDefFoundError异常
3.java命令-D用来设置系统变量值;java.ext.dirs表示的是告诉虚拟机加载该路径下
所有的jar文件;ext.dirs指定的jar文件由extention classloader负责加载
在命令行中运行eclipse中创建的java项目的更多相关文章
- Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件
Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件 前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现了我想要实现的内容. 但是用这个脚本的同 ...
- Windows下使用MinGW在命令行编译运行C++程序
之前学习C语言的时候都是用IDE类似CodeBlocks的工具写完直接编译运行的,今天突然心血来潮,自己下一个编译器,在命令行下,编译运行C++程序,了解一下编译过程. 一.安装编译器 首先你需要下载 ...
- 在命令行终端运行 Elisp 脚本
通常,我们在 Emacs 中运行 Elisp 代码片段,但是也可能需要在命令行终端运行 Elisp 脚本程序.在命令行终端运行 Elisp 脚本需要使用 --script 选项,例如: emacs - ...
- 终端命令行编译运行C#程序HelloWorld
终端命令行编译运行C#程序HelloWorld 今天忽然有人问我,刚学习java程序的时候,一般老师都会建议我们从配置环境变量开始从命令行编译运行程序,那么学习c#的时候基本是直接安装visual s ...
- jmeter命令行模式运行,实时获取压测结果
jmeter命令行模式运行,实时获取压测结果 jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式: sh jmeter.sh -n -t my-script. ...
- 您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具
Windows 上的安装为了在 Windows 上安装 GCC,您需要安装 MinGW.为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinGW 下载页面,下载最 ...
- 命令行下运行 java someClass.class出现 “错误:找不到或无法加载主类someClass ” 的解决方案
假设在C:\Java\code\目录下建立了如下 Test.java文件: package code; public class Test { public static void main(Stri ...
- Jmeter使用非 GUI 模式,即命令行模式运行实例讲
转载:http://www.cnblogs.com/leeboke/p/5238269.html 参考资料:https://girliemangalo.wordpress.com/2009/10/29 ...
随机推荐
- sklearn分类
近期的事务与sklearn有关,且主要用到了分类.在此做一点笔记 进行分类大概涉及三个知识点: 一. 分类器 二.特征选择 三.模型选择 一.分类器(Classification) 实例一:plot_ ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- pythonchallenge(三)
PythonChallenge_3 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux ...
- 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了
简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...
- Flex的正则表达式匹配速度与手工代码的比较
flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...
- 小白学习mysql之索引初步
导语 索引在数据库中的地位是及其的重要,同时要想完全的掌握索引并不是一件容易的事,需要对数据的查询原理以及计算机操作系统有深刻的认识,当然相关的算法和数据结构也是必须的.因此,这篇文章感到了一些压力, ...
- 年前辞职-WCF入门(6)
前言 昨天早上去医院做入职体检,被告知要预约,本以为是要排队,我连视频都准备好了...结果就回来了.下午去了新公司那边找房子,2了,因为公司提供了班车列表,我既然就只在班车所经过的几个地方找,却遗漏了 ...
- JS函数表达式
导图
- 压缩算法实现之LZ78
LZ78编码 LZ78算法,建立词典的算法. LZ78的编码思想: 不断地从字符流中提取新的缀-符串(String),通俗地理解为新"词条",然后用"代号"也就 ...
- hdu3487 伸展树(区间搬移 区间旋转)
对于区间旋转使用lazy思想就能解决.然后对于区间搬移,先把a-1结点做根,b+1作为它的右孩子,这样ch[ch[root][1]][0]就是区间[a,b],现将他取出. 然后在将当前的树伸展,把c结 ...