今天开发一个小工具,引用了Log4j,来记录日志,在eclipse下运行,代码正常,打包成jar放到doc命令行下运行报错:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
        at miaogen.zeng.util.jdbc.Configuration.<init>(Configuration.java:20)
        at miaogen.zeng.util.jdbc.Configuration.getInstance(Configuration.java:37)
        at miaogen.zeng.service.index.main(index.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 3 more

试了百度上各种方法。后来试了下导出 runable jar file试试。运行成功!

jar file和runable jar file 导出后的区别如下图:

runable jar file:

jar file:

META-INF的文件区别

下文是转载的解释

直接运行 .class的方法     java  -cp .  com.network.Chat  , 不用加.class后缀

从eclipse中export 的jar file,仅仅是把.class打包了。所以执行这种jar file需要用 java -cp .;ch04.jar com.thnkjava.ch04, 如果你还应用到另外的lib库,你必须在cp里说明,也就是  java -cp .;ch04.jar;lib01.jar;lib02.jar com.thnkjava.ch04 来执行。事实上可以发现ch04.jar也在cp里面,说明ch04.jar就是lib库,最后的参数指明了要被执行的类名。

如果从eclipse里export出的是 runnable jar file,那么个执行这个jar包的时候是不需要指明哪个类的,直接这样执行 java -jar ch04.jar。原因就是jar包中的MANIFEST.MF内容不同。 runnable jar包中指明哪个类先执行,所以你可以用 java -jar ch04.jar来执行你想要执行的代码,而不必指明具体哪个类。这个你可以打开 jar包查看MANIFEST.MF的区别,一目了然。

生成runnable jar file时,有两个选项,Extract required libraries into generated JAR 和 package equired libraries into generated JAR。 前者是把你用到的.class 文件提取出来,后者则是把你所需要的所有jar包都打进一个包里。两者的MANIFEST.MF文件内容也有所不同,这应该是eclipse造成的,IDE 做了自己的事情,具体就不研究了。

代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file相关推荐

  1. linux命令行下读取u盘内容_Linux命令行下的快捷键

    1. 命令行下的快捷键 经常在命令行下工作的同志们,可能用的最多的就是两个上下键,主要用来调出 历史命令:使用左右箭头使光标向后或向前移动以修改上次使用过的命令.其实 这样做效率并不是很高,有了快捷键 ...

  2. 渗透基础——命令行下安装Microsoft .NET Framework

    0x00 前言 在渗透测试中,有些工具的运行(例如高版本的Powershell)需要依赖Microsoft .NET Framework 4.0的环境. 而默认配置下,Win7不支持Microsoft ...

  3. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码

    这几天琢磨写一个Android的Runtime用来加速HTML5 Canvas,让GameBuilder+CanTK 不但开发速度快,运行速度也能接近原生应用.所以花了点时间研究Android NDK ...

  4. VS2017报错:E1696 命令行错误: 无法打开 元数据 文件 “platform.winmd”

    VS2017报错:E1696 命令行错误: 无法打开 元数据 文件 "platform.winmd" 在下载别人的项目到自己的电脑上时,打开项目出现问题,一开始报错显示无法加载&q ...

  5. Glup命令行相关报错

    Glup命令行相关报错 gulp : 无法加载文件 C:\Node\gulp-demo\gulpfile.js,因为在此系统上禁止运行脚本 解决方法如下 https://blog.csdn.net/g ...

  6. mysql 在cmd命令行下操作遇到的转义字符

    今天在cmd命令行下,用mysqldump来进行备份数据库,遇到了这个一个问题, 先看命令如下,  mysqldump -uyaner -pyaner&123 -h 192.168.0.5 t ...

  7. kvm--virsh命令行下管理虚拟机

    virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式: (1)基础操作 --- 命令行下管理虚拟机 virsh list ...

  8. linux虚拟机启动网卡命令,命令行下无法联网怎么办,vmware下安装archlinux实现网络连接,实机grub引导启动linux...

    安装archlinux可参考: 百度·贴吧里也有置顶帖给出了官方维基: 由于用的电信宽带需要客户端(大学苦逼,需要客户端),无线网卡也不支持(cmcc和chinanet都需要登陆网页,命令行下无线网连 ...

  9. 在linux命令行 下学习编写java

    对于新手来讲, 使用eclipse 等IDE来学习java是最为方便和效率的. 学习Java能令程序猿深刻地理解面向对象的编程思想 . 但Java 是一个跨平台的编程语言. 本文介绍下在命令行下学习j ...

最新文章

  1. python 图像iou_如何通过python实现IOU计算代码实例
  2. 【Android 插件化】VirtualApp 源码分析 ( 启动应用源码分析 | HomePresenterImpl 启动应用方法 | VirtualCore 启动插件应用最终方法 )
  3. struct的初始化
  4. 【IT界的厨子】酱香鲈鱼
  5. 亲和数 杭电2040
  6. 科园贸易:帆软助力其推动数据应用落地,打造自主可控数据平台
  7. Windows临界区简单实现
  8. 最简理解空间射线与平面交点
  9. IOS开发学习笔记(一)——ObjectC语言快速入门
  10. sift算法_图像配准SIFT
  11. 刘强东学习亚马逊:控制供应链 技术是最大障碍
  12. Python绘制用于学术论文投稿的黑白图片
  13. 反编译so库破解so
  14. 新手都能用到的140个电脑技巧
  15. Tommy Hilfiger官宣金秀贤为2021年秋季男装系列全新品牌大使
  16. 4章 RxJava基本响应类型
  17. 程序猿思维释放:打破常态
  18. 托尔斯泰《战争与和平》主要人物
  19. 【目标检测】MMDetection的安装与基础使用
  20. Windows7下载IE浏览器11版本

热门文章

  1. jsp mysql登录 demo_java jsp+servlet+mysql实现登录网页设计
  2. 求10 翻译c语言,求助:谁能帮我翻译下最基础的C语言,我是新手,谢谢了!
  3. ksrot php_php中ksort函数的功能起什么作用呢?
  4. 16字节 oracle md5,Oracle中的MD5加密
  5. Hibernate学习之hibernate.cfg.xml
  6. php自然排序法的比较过程,PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)...
  7. linux文件浏览 ls,linux浏览文件命令
  8. 杨宏宇:腾讯多模态内容理解技术及应用
  9. 计算机常用主题词,标引主题词的目的是( )。A.反映文件的全部内容B.便于计算机检索和管理C.供归_考题宝...
  10. 职业规划纵向横向_收下这份《职业规划喂饭式指南》