文档章节

java命令行执行带依赖jar包的main函数

山哥
 山哥
发布于 2016/04/13 09:37
字数 513
阅读 5847
收藏 6

# 在Linux下面ClassPath前面是一个点号加一个冒号; 在Windows下面ClassPath前面是一个点号加一个分号

Linux: java -Dfile.encoding=utf8 -cp .:./lib/commons-lang-2.6.jar:./lib/log4j-1.2.15.jar Mytest

Windows:java -Dfile.encoding=gbk -cp .;./lib/commons-lang-2.6.jar;./lib/log4j-1.2.15.jar Mytest


# 由于 -cp 参数不能用通配符,当依赖 jar 文件都在同一目录,可通过 -Djava.ext.dirs 指定目录。

# 注意: java中系统属性java.ext.dirs指定的目录由ExtClassLoader加载器加载,如果您的程序没有指定该系统属性(-Djava.ext.dirs=sss/lib)那么该加载器默认加载$JAVA_HOME/lib/ext目录下的所有jar文件。但如果你手动指定系统属性且忘了把 $JAVA_HOME/lib/ext 路径给加上,那么ExtClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着你将失去一些功能,例如java自带的加解密算法实现。

java -Djava.ext.dirs=lib Mytest


# 如果在MANIFEST.MF里配置了Main-Class,可以直接执行jar文件

java -jar xxx.jar


# 如果程序中需要解析在  classpath 下的一些配置文件,则可以将这些配置文件放到一个目录下,并使用 -classpath 指定

java -Djava.ext.dirs=lib -classpath conf  com.test.MyTest


-------------------------------------------------------------------------------------------------------------------------------------

总结下(在Linux环境下):

1. 如果所有 jar 包都在 lib 目录下,配置文件在 conf 目录下:

java  -Dfile.encoding=utf8  -Djava.ext.dirs=./lib  -classpath  ./conf   com.test.MyTest


2. 如果所有依赖 jar 包在 lib 目录下,但是 主程序 jar 包在别的目录下,则要结合 -cp;此时就不能使用 -classpath conf 来指定配置文件目录了,必须要放到 -cp 下,将 conf 目录和 主程序 jar 连接在一起:

java  -Dfile.encoding=utf8  -Djava.ext.dirs=./lib  -cp ./conf:./test.jar   com.test.MyTest


3. 不使用 -Djava.ext.dirs ,仍然使用 -cp,则使用程序循环 jar 包拼接路径:

app_path=.
jars_path=$app_path/lib
conf_path=$app/conf

jars=`find $jars_path -name "*.jar"`

cp_env=$conf_path

for jar in jars
do
    cp_env=$cp_env:$jar
done

# 如果Main方法所在的主 jar 包,不在 lib 目录下,则需要再把主 jar 包也接入 cn_env
# cp_env=$cp_env:$app_path/test.jar

exec java -Dfile.encoding=utf8 -cp "$cp_env"  com.test.MyTest

-------------------------------------------------------------------------------------------------------------------------------------


本文转载自:

共有 人打赏支持
山哥

山哥

粉丝 243
博文 351
码字总数 136465
作品 0
南京
程序员
使用Maven运行Java main的方法(转)

使用Maven运行Java Main的方法(既Java Application项目),可以有如下方式解决: 1、将Maven项目导入到eclipse中,然后直接项目右键【Run As】->【Java Application】。 2、直接指定jar包的...

easonjim
2017/05/09
0
0
使用lein和Intellij IDEA12建立cljure项目

----------------版本旧了,各位新手绕道吧--------------- 最近看了paul大神的黑客与画家.于是想学lisp.不过因为出身java.于是找了同为jvm系的clojure作为lisp旅程的第一步.无奈国内新手引导...

架构梦想
2013/12/22
0
0
JAVA基础知识之编译、运行、打包

一:java环境设置 在环境变量中设置以下三个变量: JAVAHOME=C:j2sdk1.4.1 //可以改为相应的目录 CLASSPATH=%JAVAHOME%libtools.jar;%JAVAHOME%libdt.jar PATH=%JAVAHOME%bin;%PATH% 然后在命...

luminji
2015/06/03
0
0
Ubuntu 18.04.1 搭建Java环境和HelloWorld

一、搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择相应的版本,点击jdk,进入下...

王磊的博客
08/24
0
0
阿里Java架构师打包 FatJar 方法小结

在函数计算(Aliyun FC)中发布一个 Java 函数,往往需要将函数打包成一个 all-in-one 的 zip 包或者 jar 包。Java 中这种打包 all-in-one 的技术常称之为 Fatjar 技术。本文小结一下 Java 里打...

Java互联网架构师
08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

等语句含义

经常会看到某些网站的框架中会用到 <!--[if IE7]><![endif]--> 等语句,今天特意查阅了下它们的区别: <!--[if IE]>所有的IE可识别<![end if]--><!--[if !IE]>除IE外都能识别<![end if]-->......

度_
13分钟前
0
0
资源的有限性与任务的复杂性之间的矛盾

看了一篇文章How to Manage Connections Efficiently in Postgres, or Any Database, 文章讨论了如何管理Postgres数据库连接,列举了几种方式: 每个请求一个连接 连接复用 连接池 连接池管理...

52iSilence7
13分钟前
1
0
Python PEP8规范整理

PEP8规范总结 PEP8 是什么呢,简单说就是一种编码规范,是为了让代码“更好看”,更容易被阅读。 具体有这些规范,参考 PEP 8 --Style Guide for Python Code.当然也可以使用Pycharm检查或使...

_Change_
24分钟前
0
0
input去空格

货币转换while True:MonStr = input()if MonStr[:3] == "RMB":USD = eval(MonStr[3:])/6.78print("USD{:.2f}".format(USD))elif MonStr[:3] == "USD":RMB = eval(MonStr[3:......

fadsaa
27分钟前
0
0
单例设计模式

单例设计模式 设计模式介绍与代码编写 在编写程序时经常会遇到一些典型的问题或需要完成某种特定需求.设计模式就是针对这些问题和需求.在大量的实践中总结和理论化之后的代码结构.编程风格以...

码农屌丝
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部