Linux shell脚本调用jar包启动一个jar为什么抛出NoClassDefFoundError的异常

10:26 artifactory的JAR包的备份 1.由于我的artifactory是使用用户jetty启动的,所以新增用户jetty能操作的文件夹/usr/jetty 给jetty用户赋予该目录的权限 root@kiko:/usr# sudo chown -R jetty /usr/jetty root@kiko:/usr# sudo chmod -R g+rws /usr/jetty 2.打开artifactory的管理界面 Export & import----
am.jar:终端下执行am命令时所需的java库.源码目录:framework/base/cmds/am android.policy.jar:锁屏界面需要用到的jar包,该包引用了android.test.runner.jar,源码目录:framework/base/policy android.test.runner.jar:测试应用所需的jar包,该包引用了core.jar,core-junit.ajr以及framework.jar,源码目录:framework/base/test-ru
背景 目前做的这个项目应用运行在weblogic服务器上面,weblogic特有的一些机制使得在websphere.tomcat上能够正常运行的应用,不能在weblogic上运行.本文中提到的weblogic10与hibernate3中antlr.jar包冲突问题就是其中的一种. 现象 在使用hibernate3查询数据库的时候,weblogic服务对应的java进程直接退出,后台报错如下: CharS panic: ClassNotFoundException:org.hiber
activation.jar 与javaMail有关的jar包,使用javaMail时应与mail.jar一起加入到lib中去,具体负责mail的数据源和类型等. antlr.jar Hibernate用这个包来生成HQL语句并执行,是Hibernate的必须包,没有它就会报NoClassDefFoundError: antlr/ANTLRException错误. ajaxtags-1.2-beta3.jar ajax 提供的标签库,使用户能像使用 jsp 普通标签一样使用 ajax. ant.
1.网络连接超时 Maven在请求中央仓库后,一段时间没得到响应,那么它会自动断开连接.很有可能造成jar下载了一部分的情况下,而发生失联. 2.存在内部坏版本 使用maven构建的项目下面都有一个pom.xml文件,里面设置了该项目的依赖的jar包.第一次因为没有联网或者nexus服务未启动,导致下载jar失败,以后依然下载失败.后来终于找到了原因: 因为第一次下载失败时,会在C:\Users\Administrator\.m2\repository 中生成对应jar包的lastUpdated
Hadoop的安装部署可以分为三类: 一. 自动安装部署 Ambari:http://ambari.apache.org/,它是有Hortonworks开源的. Minos:/XiaoMi/minos,中国小米公司开源(为的是把大家的手机变成分布式集群,哈哈..) Cloudera Manager(收费,但是当节点数非常少的时候是免费的.很好的策略!并且非常好用) 二. 使用RPM包安装部署 Apache Hadoop不提供 HDP和CDH提供 三. 使用JA
这篇文章主要介绍了mysql启动服务报1058错误的解决方法,需要的朋友可以参考下 今天研究一个框架,数据库使用mysql,启动mysql服务的时候报1058错误,如下图. 在网上找了半天都是一样的解决 办法,试了一遍通通不行(仅针对我本地服务启动出现的问题无效).网上解决办法如下:. 新启动,却无法启动. 解决方法: ◆1.运行 D:\mysql\bin&mysqld-nt -remove Service successfully removed. D:\mysql\bin&mysqld-n
这篇文章主要介绍了二种jar包制作方法讲解:dos打包jar和eclipse打包jar文件,大家参考使用吧 1.在dos下面打包jar文件 D:\jdk1.5.0_07\bin& jar /help 用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的]文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m
spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类文件. (1) spring-core
java中如何打jar包(图解) 第一步输入:在dos下面输入jar 后面jar的用法 主要用到: -c 创建新的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 第二步:进入你要打jar那个目录 第三步:打jar包 jar -cvf test.jar *.* test.jar:你创建jar包的名字 *.*:这句话你把那个目录下面所有的东西都打进jar包,也可以*.class等 第四步查看jar包 第五步,查看里面内容是否和你要求的一样:打开方式选择WinRAR就行了
Spring 3.1与之前的 2.X 的不一样,新版本把原来的包分解了,功能分工明确: org.springframework.aop-3.1.1.RELEASE.jar ---- ----spring 的面向切面编程,提供AOP(面向切面编程)实现, org.springframework.asm-3.1.1.RELEASE.jar ---- ---- Spring独立的asm程序, Spring2.5.6的时候需要asmJar 包,3.0开始提供他自己独立的asm.jar .ASM是小巧轻便
1. 在我用 F:\mongodb\bin&mongod --dbpath f:\mongodb\data --logpath f:\mongodb\logs\MongoDB.log --auth --install 创建验证的时候,总是创建失败. 原因: MongoDB服务已经存在了,不能重复创建,所以要是想创建新的带 --auth 就的先删除在创建 删除服务:F:\mongodb\bin&sc delete MongoDB 停止服务: F:\mongodb\bin&net stop
今天将Mac下DNS设置的模块完成了,于是着手做一个单机服务器吧!将项目拆开成了两个目录,server和localserver. 另外解决了一个很初级的Spring配置的问题,如果要引入jar包中的配置,需要在classpath后面加上'',例如: classpath*:/spring/applicationContext.xml 后来又遇到一个问题:想要把shell脚本打入jar包,但是发现即使获取到了jar包中shell脚本的路径(xxx.jar!/xx/ss这样的路径
truts2必须JAR包(6个): struts2-spring-plugin-2.0.11.2.jar xwork-2.0.5.jar struts2-core-2.0.11.2.jar freemarker-2.3.8.jar ognl-2.6.11.jar commons-logging-1.0.4.jar(与hibernate3.2必须JAR包重复,取一个既可) hibernate3.2必须JAR包(8个): antlr-2.7.6.jar commons-collections-2.1
仅针对10.3及以上版本. 在WEB-INF下面添加weblogic.xml文件. &?xml version=&1.0& encoding=&UTF-8&?& &weblogic-web-app xmlns=&/weblogic/weblogic-web-app& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&q
作为Java程序员,会经常碰到jar包冲突,特别是涉及到的外部依赖越多,冲突概率就会越大.由于我们的应用代码都是使用maven来管理的,所以依赖的解决相对比较容易.不过最近碰到的一个问题,确实经历了好多步才最终定位. 现象:应用启动过程中,spring容器启动失败,错误日志很明确,找不到CollectionUtils.isEmpty()方法,jar冲突的典型症状之一. 首先,确认了这个类是apache的commons-collections中的工具类(在eclipse中ctrl+shift+T或
方法一:通过jar命令 jar命令的用法: 进入cmd模式输入jar然后回车,就能看见jar命令的帮助说明: 用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files - 选项包括: -c 创建新的归档文件 -t 列出归档目录 -x 解压缩已归档的指定(或所有)文件 -u 更新现有的归档文件 -v 在标准输出中生成详细输出 -f 指定归档文件名 -m 包含指定清单文件中的清单信息 -e 为捆绑到
现在项目开发中Spring框架应用的还是比较多的,自己用的还不太熟练,每次用的时候总配置半天,总有些配置弄错,就找个时间总结以下,方便以后再搭建环境的时候直接拿来用. 以Spring4为例,这里就不提供Spring的下载地址了,官网上很容易下的到. 1.导入相关jar包 建好web项目以后,导入Spring自己的jar包 spring-beans-4.0.0.M2.jar spring-context-4.0.0.M2.jar spring-core-4.0.0.M2.jar spring-ex
jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.jar JAF框架的jar包 annotations-a
一个神奇的网站: 使用Eclipse开发应用程序,少不了使用第三方jar包,而每次引入jar包都是一个不小的问题,不仅那些jar包的位置经常弄不清楚,而且很浪费时间.鉴于此,我列举了三种常用的jar包引入方式,其中第一种是我们最常用的普通操作方式,而第二种和第三种则是快速版的操作方式. 下面看第一种方式:基本步骤式 右键项目属性,选择Property,在弹出的对话框左侧列表中选择Java Build Path,如下图所示:选择Add External
spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的. 除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类文件. (1) spring-core.
jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.jar JAF框架的jar包 annotations-a
雪影工作室版权所有,转载请注明[http://blog.csdn.net/lina791211] 一.框架背景 1.开发工具 MyEclipse 10 Pro 2.框架使用 Struts2.3,Hibernate3,Spring3.0.5 (标准SSH框架) 3.版本管理 svn 1.6 插件,visual svn 版本管理工具 4.数 据 库 Oracle 11g R2 二.Oracle XMLType 引用Oracle官网对于Oracle的XMLType的部分解释 XMLType is a
Java工程中添加依赖jar包不起作用问题总结 此次总结两种方式的依赖问题 1 在Eclipse中添加依赖jar包不起作用问题 这种方式可能是Eclipse缓存,或者Eclipse还没有反应过来.例如Eclipse中有个Java工程以前依赖了a.jar文件,但是在工程中删除这个文件后,工程可以正常执行,这可能是Eclipse缓存问题. 这种情况刷新Eclipse中的Java工程或者重启Eclipse即可. 2 Linux中添加依赖jar包不起作用问题 造成这种情况的原因是有多个进程在后台执行这该
前段时间在做项目的时候,用eclipse构建的maven工程部署到tomcat下面去时,发现tomcat的web-inf下面的lib目录是空的,当时弄了好长时间,最后实在没辙了,就手动把所有的依赖拷到web-inf的lib下面去,但是每次重新部署时,eclipse自动部署又将lib目录清空,当时那叫一个郁闷,后来我看了下别人的classpath文件,发现我的classpath跟别人的不同点 图1: 图2: 发现在加了上述标签后,能正常的部署项目,并且tomcat lib下面
项目中,经常会遇到ClassNotFound,NoSuchMethod异常,第一反应往往是类路径不对,jar没有正确的引用.第一步判断jar是否加载,还是 加载的jar由于maven依赖管理存在传递依赖,造成依赖的jar版本号不对,相应的类找不到,或者是相应类版本不对,没有对应的方法. 一 造成jar 冲突的原因:如果项目中存在对同一jar不同版本依赖的时候,maven 2根据最近原则,默认引用最靠近项目版本的jar,maven 2.0.9会根据最先声明原则 来引用相应版本的无论那种方式
maven项目中自动下载jar包的pom.xml配置 用 maven2 ,pom.xml中设置了依赖,会帮你下载所有依赖的.jar到 M2_REPO 指向的目录 -------------------------------------------------------------------------------------------- M2_REPO是一个用来定义 maven 2仓库在硬盘中的存储位置,windows默认是C:\Users\机器名\.m2\repository.按道理安
Tomcat下项目很多,每个项目都重复使用了很多相同的jar包,那么设置jar包共享可以节省Tomcat装载程序的内存开支. tomcat jar 共享 在Tomcat下设置多项目jar共享常见的有两种方法.这两种方法的共同点是修改tomcat下conf目录中的catalina.properties文件. 第一种方法:修改catalina.properties中的common.loader属性.在common.loader属性原值基础上追加&,${catalina.home}/lib/share
Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的, 4个人共用,有时候用 Maven 来远程下载 JAR 包会显得很慢,一般我发现下载速度不明显的时候,我就 Ctrl + C 来终止它的下载. 然后改用手动来下载,因为用迅雷一类的工具来下载会快很多.我机子上 Maven 的本地仓库的很多 JAR 包我都是手动下载的. 手动下载的话就会带来一个问题,就是,怎么样手动将下载下来的 JAR 包添加到 Maven 的本地
如果java 文件和jar 包在同一目录 编译: D:\wangyu&javac -cp xalan.jar Test.java 执行: D:\wangyu&java -classpath xalan. Test 如果java文件和jar包不在同一目录 编译: D:\wangyu&javac -cp d:\wangyu\xalan.jar Test.java 执行: D:\wangyu&java -classpath d:\wangyu\xalan.d:\wangy
EasyImage 网站 : /aviyehuda/EasyImage EasyImage是一个图片制作的第三方Jar包,可以做所有基础的图片操作:转换,裁剪,缩放,选择等:可以结合很多总操作,创造出很酷的效果:操作 简单等-- 例如要融合两张图片,代码如下: Image image = new Image(&c:/pics/p1.jpg&); bineWithPicture(&c:/pics/p2.jpg&);
这篇文章主要介绍了dom4j从jar包中读取xml文件的方法,需要的朋友可以参考下 进行封装的时候,我们常常需要用xml来定义一些规范,在单独运行读取的时候当然不会有问题,但这些xml是往往是放在jar包里的,这样一来,这些东西就找不出来了.文中用到的xml定义如下: &?xml version=&1.0& encoding=&utf-8&?& &ACCESOS& &item& &SOCIO name=&adsf&
andriod中如果引入jar包的方式不对就会出现一些奇怪的错误,用了很长时间才解决出现的bug,下面与大家分享下正确引入jar包的方式 andriod中如果引入jar包的方式不对就会出现一些奇怪的错误. 工作的时候恰好有一个jar包需要调用,结果用了很长时间才解决出现的bug. 刚开始是这样引用的(eclipse): 右键工程,Build path,java build path, 选择libraries,在右边的按钮中点击&Add External JARs&, 然后选择合适的ja
如果开机启动一个Activity,开机首先看的界面,是你的程序界面,如果为了,开机后也启动你的程序,但是不显示自己程序的界面,就要用Service服务,下面是开机启动服务service示例 个例子实现的功能是: 1,安装程序后看的一个Activity程序界面,里面有个按钮,点击按钮就会启动一个Service服务,此时在设置程序管理里面会看的有个Activity和一个Service服务运行 2,如果手机关机重启,会触发你的程序里面的Service服务,当然,手机启动后是看不到你的程序界面.好比手机
这个对框完全继承.仿照AlertDialog,只是实现了自定义效果;另外,没有实现setIcon,因为iphone中的对话框多数都没有图标;附件包含例子.jar包.jar包源码 效果图: 这个对框完全继承.仿照AlertDialog,只是实现了自定义效果. 另外,没有实现setIcon,因为iphone中的对话框多数都没有图标. 附件包含例子.jar包.jar包源码. 文件简介: aIphoneDialogTest.rar 这是示例工程 使用时注意先要在build path中导入iPhoneDi
系统定时启动服务:在规定的时间内运行指定的服务,下面与大家分享下2种实现方法,感兴趣的朋友可以参考下哈 有方法2中 1) 1.cmd 2.at 8:32/everymonday,tuesday,wednesday,thursday,friday D:\\Program Files\Tongda\ispirit\ispiritPro.exe 这样就可以在计划任务看到 2) at 8:32/everymonday,tuesday,wednesday,thursday,friday D:\\Progr
这篇文章主要介绍了jar包双击执行程序的方法,可实现双击jar包直接执行Java程序的功能,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jar包双击执行程序的方法.分享给大家供大家参考.具体实现方法如下: 源文件:MyMenuTest.java 编译结果: C:\Users\zhangbz\Desktop\demo&javac MyMenuTest.java C:\Users\zhangbz\Desktop\demo&dir 驱动器 C 中的卷没有标签. 卷的序列号是 E637
怎样在android平台上使用第三方jar包,为什么我在引入了,编译时没有错误,运行时就有错误,报无法实例化错误,请问这是什么原因,本文给于解决方法,需要了解的朋友可以参考下 在android上导入zxing.jar包,总是报错: Could not find class 'com.google.zxing.MultiFormatWriter', referenced from method com.changyang.app.util.Encode2dUtil.creat2DCode 后来找到
这篇文章主要介绍了java生成jar包的方法,对Java生成jar包的具体步骤及方法进行了较为详细的描述,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了java生成jar包的方法,是非常实用的技巧.分享给大家供大家参考.具体分析如下: 很多Java初学者都会有这样的疑问:Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行? 通常来说有两种方法,一种是制作一个可执行的JAR文件包,然后就可以像.chm文档一样双击运行了:而另一种
这篇文章主要介绍了用程序代码更新com目录下的所有文件到jar的对应目录结构中去,这样可以做到自动更新程序吧 假设目录结构是maven标准结构 -src -target -test.jar(你需要更新的jar包) 复制代码 代码如下: package mon.base.utils. import static org.junit.Assert.*; import java.io.F import java.io.IOE im
这篇文章主要介绍了linux停止和查看启动服务的命令使用方法,需要的朋友可以参考下 1. 查看Linux启动的服务 chkconfig --list 查询出所有当前运行的服务 chkconfig --list atd 查询atd服务的当前状态 2.停止所有服务并且在下次系统启动时不再启动,如下所示: 复制代码 代码如下: chkconfig --levels 12345 NetworkManager off 如果想查看当前处于运行状态的服务,用如下语句过滤即可 复制代码 代码如下: chkcon
这篇文章主要介绍了用Java连接sqlserver数据库时候几个jar包的区别分析,需要的朋友可以参考下 今天在群里看见有人问了这个问题,那就把我自己总结的知识拿出来与大家分享一下吧..当然可能还有什么不对的地方,希望指出: ***msbase.jar.mssqlserver.jar.msutil.jar(支持sql2000): 早期的连接数据库Jar包:在连接数据时候需要手动导入驱动包.即手动导入class.forName(驱动名称); ***SQL Server JDBC Driver 2.
有时候,我们希望将我们的Android工程提供给第三方开发者使用.这个时候,最普遍的做法,就是提供一个jar包和一堆资源文件,第三方开发者可以将资源文件拷贝到Android工程的相应目录下,同时引用我们提供的jar包,就可以使用我们提供的相应API了 需要特别注意的是,以jar包和资源包方式提供给第三方开发者,我们的工程的代码中就不能使用类似于R.layout.main.R.string.name等等这样的方式来引用资源了. 为此,我们就不能直接使用R文件,而是要通过字段名称来动态的获取资源的i
这篇文章主要介绍了一句话Shell命令关闭不需要的随机启动服务,使用本文的一句话命令,可以达到优化系统的目的,其中要保留的服务可以自己定义,需要的朋友可以参考下 Linux可以简单的通过一条shell命令来关闭其他不需要的开机启动服务,只保留计划任务,网络,ssh和日志,看shell命令: chkconfig --list | grep 3:on | \ grep -v &crond\|network\|sshd\|syslog& | \ awk '{print &chkco
android的应用程序安装包APK如果是在高版本的android jar上开发的是无法在低版本的android SDK上跑的,那么如何简单的在高版本的工程中直接修改呢,需要的朋友可以了解下 android的应用程序安装包APK如果是在高版本的android jar上开发的是无法在低版本的android SDK上跑的,所以我们需要将我们已经开发好的应用程序换上低版本的android jar包重新编译一个APK,那么如何简单的在高版本的工程中直接修改呢: 1. eclipse中点击工程-&Prop
这篇文章主要介绍了maven中下载jar包源码和javadoc的命令介绍,本文讲解了Maven命令下载源码和javadocs.通过配置文件添加.配置eclipse等内容,需要的朋友可以参考下 1:Maven命令下载源码和javadocs 当在IDE中使用Maven时如果想要看引用的jar包中类的源码和javadoc需要通过maven命令下载这些源码,然后再进行引入,通过mvn命令能够容易的达到这个目的: mvn dependency:sources mvn dependency:resolve
前天可以用javac编译带外部jar包的.java文件了 但是在用java命令运行的时候还是有问题,查来查去,原来是没有在classpath里引入 加上classpath参数也无效 但是不想修改环境变量文件,因为有时可能用,有时可能不用,挺麻烦的 今天终于解决了,把jar包弄到jdk文件下的\jre\lib\ext文件夹下,就可以了 看来JVM会在这里自动寻找jar包啊,原来如此,那么编译的时候也直接用-cp接到这里编译好了 还有,规定死放在这个文件夹下也挺不方便的 打算,建一个文件夹,加一个c
一般情况下properties文件都是在工程内使用的,如果application打成jar包之后,修改properties文件后就需要重新打jar,很麻烦. 于是把properties文件提到jar包统计目录,这样修改后不用重新打包了,用起来方便一点. 代码如下: String proFilePath = System.getProperty(&user.dir&) + &\\filename.properties&; InputStream in = new Bu
当朋友们把JWFDv0.96引入ECLIPSE工程之后,如果系统报找不到JAR错误,请用鼠标右键点击JWFD项目名称,出现弹出菜单之后,然后选择 最后一项properties,进入JAVA BUILD PATH这个选项里面(如下图),把LIB项目下的JAR包的路径修改为你配置JWFD 开发包的LIB的实际路径,就可以解决这个问题了 比如这个项目名称,鼠标对着这个项目名称点鼠标右键,会弹出一个菜单,选择最后一项properties 选中一个JAR包之后,点击下面的EDIT按钮 将这个JAR文件的
过程是这样的,当所有的android系统服务启动完成以后,会像发传单一样像外面散布消息,这个过程就是广播,我们需要做的就是去捕捉这个系统启动完成 的消息,捕捉到这个消息以后,该启动Activity就启动Activity,该启动服务就启动服务,最好的办法就是实践. 为了更好的理解这个过程,先按部就班的开始,以后玩熟练了想横着玩就横着玩想竖着玩就竖着玩. 创建好了工程项目之后,定义一个广播类,继承自BroadcastReceiver,这个类得作用就是捕捉到系统发出的消息以后做的事情代码都写在这个类里
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.074 (s). 7 q(s)详细介绍Linux shell脚本基础学习_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
详细介绍Linux shell脚本基础学习
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩16页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢2539人阅读
Linux下shell脚本启动jar包
&&& 不说废话,直接上图。
&&& 这是整个目录结构。直接看脚本。
&&& 上面是完整的脚本代码,原理不多说,百度Google都可以。需要注意的地方是以下几点:
第4行的MAIN_CLASS=&ls.gatetest.PressureTest&是你的启动函数所在的类(main函数)第6行中的&CLASSPATH=.:./config&,这个是将你的配置文件路径告诉CLASSPATH,当然你可以随意修改后面的目录,这里默认放到了config下面;gatetest.jar是运行的主jar,当然可以在第7~9行做;第7~9的for循环是依次加载并拼接jar包到CLASSPATH中,不建议修改;第23行的start和第33行的stop是启动函数,看后面的启动命令就知道了;启动命令:sh start.sh start;停止命令:sh start.sh start;重启命令:sh start.sh restart;可以根据需要,自行向main传参,比如需要传递3个参数时,可以修改脚本如下:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2825次
排名:千里之外231986人阅读
java学习(3)
在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断尝试一些其他的方法去解决这个问题,而没有真正去理解这个错误的原因。这篇文章就是通过解决NoClassDefFoundError错误处理的经验分享来揭开NoClassDefFoundError的一些秘密。NoClassDefFoundError的错误并非不能解决或者说很难解决,只是这种错误的表现形式很容易迷惑其他的Java开发者。下面我们来分析下为什么会发生NoClassDefFoundError这样的错误,以及怎样去解决这个错误。
NoClassDefFoundError错误发生的原因
NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。
简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。发生NoClassDefFoundError错误时,你能看到如下的错误日志:
Exception in thread "main" java.lang.NoClassDefFoundError
错误的信息很明显地指明main线程无法找到指定的类,而这个main线程可能时主线程或者其他子线程。如果是主线程发生错误,程序将崩溃或停止,而如果是子线程,则子线程停止,其他线程继续运行。
NoClassDefFoundError和ClassNotFoundException区别
我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。
怎么解决NoClassDefFoundError错误
根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到classpath中,或者检查为什么类在classpath中是不可用的,这个发生可能的原因如下:
对应的Class在java的classpath中不可用
你可能用jar命令运行你的程序,但类并没有在jar文件的manifest文件中的classpath属性中定义
可能程序的启动脚本覆盖了原来的classpath环境变量
因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致
检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误,NoClassDefFoundError有可能是由于静态初始化失败导致的
如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError
下面我们看一些当发生NoClassDefFoundError时,我们该如何解决的样例。
NoClassDefFoundError解决示例
当发生由于缺少jar文件,或者jar文件没有添加到classpath,或者jar的文件名发生变更会导致java.lang.NoClassDefFoundError的错误。
当类不在classpath中时,这种情况很难确切的知道,但如果在程序中打印出System.getproperty(“java.classpath”),可以得到程序实际运行的classpath
运行时明确指定你认为程序能正常运行的 -classpath 参数,如果增加之后程序能正常运行,说明原来程序的classpath被其他人覆盖了。
NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError的错误。如果你查看程序日志,会发现一些java.lang.ExceptionInInitializerError的错误日志,ExceptionInInitializerError的错误会导致java.lang.NoClassDefFoundError: Could not initialize class,如下面的代码示例:
* Java program to demonstrate how failure of static initialization subsequently cause
* java.lang.NoClassDefFoundError in Java.
* Javin Paul
public class NoClassDefFoundErrorDueToStaticInitFailure {
public static void main(String args[]){
List&User& users = new ArrayList&User&(2);
for(int i=0; i&2; i++){
users.add(new User(String.valueOf(i)));
}catch(Throwable t){
t.printStackTrace();
class User{
private static String USER_ID = getUserId();
public User(String id){
this.USER_ID =
private static String getUserId() {
throw new RuntimeException("UserId Not found");
java.lang.ExceptionInInitializerError
at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
Caused by: java.lang.RuntimeException: UserId Not found
at testing.User.getUserId(NoClassDefFoundErrorDueToStaticInitFailure.java:41)
at testing.User.&clinit&(NoClassDefFoundErrorDueToStaticInitFailure.java:35)
... 1 more
java.lang.NoClassDefFoundError: Could not initialize class testing.User
at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
Read more: http:
由于NoClassDefFoundError是LinkageError的子类,而LinkageError的错误在依赖其他的类时会发生,所以如果你的程序依赖原生的类库和需要的dll不存在时,有可能出现java.lang.NoClassDefFoundError。这种错误也可能抛出java.lang.UnsatisfiedLinkError: no dll in java.library.path Exception Java这样的异常。解决的办法是把依赖的类库和dll跟你的jar包放在一起。
如果你使用Ant构建脚本来生成jar文件和manifest文件,要确保Ant脚本获取的是正确的classpath值写入到manifest.mf文件
Jar文件的权限问题也可能导致NoClassDefFoundError,如果你的程序运行在像linux这样多用户的操作系统种,你需要把你应用相关的资源文件,如Jar文件,类库文件,配置文件的权限单独分配给程序所属用户组,如果你使用了多个用户不同程序共享的jar包时,很容易出现权限问题。比如其他用户应用所属权限的jar包你的程序没有权限访问,会导致java.lang.NoClassDefFoundError的错误。
基于XML配置的程序也可能导致NoClassDefFoundError的错误。比如大多数Java的框架像Spring,Struts使用xml配置获取对应的bean信息,如果你输入了错误的名称,程序可能会加载其他错误的类而导致NoClassDefFoundError异常。我们在使用Spring MVC框架或者Apache Struts框架,在部署War文件或者EAR文件时就经常会出现Exception in thread “main” java.lang.NoClassDefFoundError。
在有多个ClassLoader的J2EE的环境中,很容易出现NoClassDefFoundError的错误。由于J2EE没有指明标准的类加载器,使用的类加载器依赖与不同的容器像Tomcat、WebLogic,WebSphere加载J2EE的不同组件如War包或者EJB-JAR包。关于类加载器的相关知识可以参考这篇文章。
总结来说,类加载器基于三个机制:委托、可见性和单一性,委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。现在假设一个User类在WAR文件和EJB-JAR文件都存在,并且被WAR ClassLoader加载,而WAR ClassLoader是加载EJB-JAR ClassLoader的子ClassLoader。当EJB-JAR中代码引用这个User类时,加载EJB-JAR所有class的Classloader找不到这个类,因为这个类已经被EJB-JAR classloader的子加载器WAR classloader加载。
这会导致的结果就是对User类出现NoClassDefFoundError异常,而如果在两个JAR包中这个User类都存在,如果你使用equals方法比较两个类的对象时,会出现ClassCastException的异常,因为两个不同类加载器加载的类无法进行比较。
有时候会出现Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/tools/javac/Main 这样的错误,这个错误说明你的Classpath, PATH
或者 JAVA_HOME没有安装配置正确或者JDK的安装不正确。这个问题的解决办法时重新安装你的JDK。
Java在执行linking操作的时候,也可能导致NoClassDefFoundError。例如在前面的脚本中,如果在编译完成之后,我们删除User的编译文件,再运行程序,这个时候你就会直接得到NoClassDefFoundError,而错误的消息只打印出User类的名称。
java.lang.NoClassDefFoundError: testing/User
at testing.NoClassDefFoundErrorDueToStaticInitFailure.main(NoClassDefFoundErrorDueToStaticInitFailure.java:23)
现在我们知道要怎样去面对NoClassDefFoundError异常并解决它了。
参考文章:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:343712次
积分:1491
积分:1491
排名:千里之外
原创:28篇
转载:47篇
评论:20条
(1)(1)(1)(2)(5)(3)(1)(4)(3)(2)(3)(2)(5)(7)(1)(2)(3)(6)(20)(1)(1)(1)(1)

我要回帖

更多关于 shell脚本运行jar 的文章

 

随机推荐