java命令行執行帶依賴jar包的main函數

# 在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 包拼接路徑:


 

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

原文地址:https://my.oschina.net/jsan/blog/657819

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章