通过加入classpath的形式实现命令行运行java程序时引入第三方jar包
发表于|更新于|Java
|总字数:160|阅读时长:1分钟|浏览量:
在命令行运行java程序时,如果想引入第三方jar包该怎么办呢。方法其实有很多,一般都是去折腾classloader.
这里介绍一种操作相对简单的方法,就是在运行之前把需要的jar包都加入到classpath中。
具体来说,就是写一个shell脚本,定义一个参数,可以就叫CLASSPATH, 也可以叫别的。
CLASSPATH=yourownjar.jar:xxx.jar:/xx/xx/xxx1.jar:”$CLASSPATH”
需要注意的是,自己写的主类所在的jar也要包含在自己定义的classpath中.
然后使用java -classpath命令运行即可:
java -classpath ${CLASSPATH} xx.Main
文章作者: 流沙
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Mobility!
相关推荐

2018-05-10
java细节:三目运算符和自动拆箱
问题引入今天用findbugs扫代码时遇到一个很有意思的问题,有关三目运算符的,在这儿记录一下。 就是类似这么一行代码: 12boolean b = true; Long a = b ? 0l : Long.valueOf(2); Findbugs给出了”Boxed value is unboxed and then immediately reboxed”的提示,意思就是有装箱的对象做了拆箱,然后又马上做了装箱。这个问题其实很常见,一开始也没注意,只是习惯性的把Long.valueOf 改成了Long.parseLong, 确实把这个警告消掉了,不过之后才意识到不对:明明valueOf返回的是Long类型,parseLong返回的是long类型,而需要的正是Long类型,为什么反而用valueOf的时候有问题呢。 其实思考一下大概也能想明白,主要就在三元运算符的另一个分支,因为另一个分支返回的是一个未装箱的0,所以这个三元运算符的返回值就成了long,所以原本的Long类型就要经过一次拆箱才会被返回。要优化这个部分的话,保持两个分支的返回类型一致就可以了。 然后把相...

2017-06-05
【翻译】java里编写基准测试的一些经验
有时候我们需要写一些简单的性能测试代码,恰好在stackoverflow上看到一篇经验之谈,https://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java, 怎样写基准测试来尽量屏蔽掉环境的影响。 翻译出来贴在这儿: 来自Java HotSpot作者的撰写微基准的提示: 规则0:阅读有关JVM和微型基准测试的好论文。比如https://www.ibm.com/developerworks/java/library/j-jtp02225/。不要对这种测试有太高的期望;它们对JVM性能的测试仅能起到有限效果。 规则1:始终包含一个预热阶段,它一直运行,直到触发所有的初始化和编译。 (预热阶段的迭代次数可以减少,经验法则是几万次循环。) 规则2:始终使用-XX:+PrintCompilation -verbose:gc 等参数来运行,这样可以确定编译阶段和JVM的其他部分在计时时是否进行了一些意外的工作。 规则2.1:在计时和预热阶段的开始和结束打印消息,这样可以确定...

2020-03-13
通过mysql批量操作不生效问题聊聊java里mysql的batch
众所周知,对于mysql,使用批量操作,可以大幅度提升大数据量下操作的性能。不过,在java中使用mysql时,有些细节务必注意,否则就会导致batch操作不生效,也就享受不到批量操作的性能了。 前阵子,发现一条sql的性能明细不正常,几千条数据批量insert,耗时居然到了秒级。排除了服务器性能、网络的问题后,开始怀疑是代码的问题,导致batch操作没有真正生效,感觉只有一条一条去跟数据库交互的话才会出现这种性能。 调了一下代码,翻到了mysql-connector里,关键的代码是这么一块: 12345678910111213if (!this.batchHasPlainStatements && this.connection.getRewriteBatchedStatements()) { if (canRewriteAsMultiValueInsertAtSqlLevel()) { return executeBatchedInserts(batch...

2017-03-02
Java kryo/protobuf/protostuff序列化 or Json 性能对比
对于一个java object的序列化,想测一下使用json和使用一般序列化工具,在时间性能、空间性能上的区别。 json选择用fastjson. 序列化工具使用了protostuff和kyro. 为什么不用protobuf呢?因为感觉对于一个已有的上百个属性的java class来说,再去新建一个匹配的proto文件有点反人类。protostuff是protobuf的改良版本,可以直接将一个java object进行序列化,使用方法与kyro有点类似,没有protobuf那么多中间过程。其他的,hession, java自带序列化之类的,据说性能比kryo和protobuf差很多,就不测了。 简单测了一下,发现差距还挺明显的,所以感觉也不需要做具体的评测了。把日志截一段发出来,大家感受下。 fastjson serilise cost <span class="hljs-number">555805</span> <span class="hljs-built_in">length</spa...

2017-04-27
解决fatjar的 “java.lang.SecurityException: Invalid signature file digest for Manifest main attributes” 问题
最近试图运行一个fatjar的时候报错: 1234567891011121314151617181920Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:287) at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:240) at java.util.jar.JarVerifier.processEntry(JarVerifier.java:317) at java.util.jar.JarVerifier.update(JarVerifier.java:228) at java.util.jar.JarFile.ini...

2017-02-20
java分布式锁入门实战
这篇文章只讲使用,不讲原理,简单粗暴。 分布式锁,顾名思义,就是分布式的锁,应用于一些分布式系统中。例如,有一个服务部在数太机器上,然后有可能操作数据库中的同一条记录。这时,就需要分布式锁。 分布式锁实现的方式很多,一般来说需要一个实体来代表一个锁,占用锁时就新建这个实体,锁释放时也对应将相应实体删除。同时,一般还需要一个锁超时过期的策略,避免一些异常情况造成锁无法被释放。 zookeeper和redis都是常用的实现分布式锁的方式。接下来就简单介绍一下这两种方式的使用。 基于zookeeper的分布式锁使用zookeeper的话,建议直接使用curator客户端. <span class="hljs-tag"><<span class="hljs-title">dependency</span>></span> <span class="hljs-tag"><<span c...
评论
公告
后端开发 | 架构设计 | AI实践
用代码拓展选择的边界
用代码拓展选择的边界





