一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Linux下用java -jar運行可執行jar包的方法教程

Linux下用java -jar運行可執行jar包的方法教程

2020-09-25 14:20u013063153 JAVA教程

這篇文章主要給大家介紹了在Linux下用java -jar運行可執行jar包的方法教程,文中介紹的非常詳細,相信對大家的工作或者學習具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

問題來源

一般來說,一個稍微大些的項目都會有一些依賴的Jar包,而在將項目部署到服務器的過程中,如果沒有持續集成環境的話,也就是說服務器不支持在線編譯及打包,那么需要自己上傳依賴的Jar包,然而可能服務器上已經存在了該項目所依賴的Jar包(比如項目修復BUG,重新打包上傳,而依賴不變),無需再次上傳,此時只需將該項目單獨打包,在運行的時候指定CLASSPATH即可。

在將Jar包部署到服務器上之后,設置CLASSPATH環境變量,運行Java -jar ...命令出現ClassNotFoundException異常。之后又試用了諸多其它參數設置CLASSPATH,例如下面幾個命令,同樣都是報找不到類異常。

?
1
2
3
4
5
set CLASSPATH = classpath1;classpath2...
java -classpath ".;D:\mylib\*" -jar jar包 #Windows設置
java -classpath ".:/data/home/mylib/*" -jar jar包 #Linux設置
java -cp ...
java -cp /lib/*

關于在CLASSPATH參數中使用通配符需要注意

正確方式(冒號代表是Linux,Windows使用分號)

?
1
java -classpath "lib/*:." my.package.Program

不正確方式

?
1
2
3
4
java -classpath "lib/a*.jar:." my.package.Program
java -classpath "lib/a*:."  my.package.Program
java -classpath "lib/*.jar:." my.package.Program
java -classpath lib/*:.  my.package.Program

解決辦法

首先你需要知道Jar包分為可執行Jar和非可執行Jar,一個可執行的Jar文件是一個自包含的Java應用程序,它存儲在特別配置的JAR文件中,可以由JVM直接執行它而無需事先提取文件或者設置類路徑。要運行存儲在非可執行的JAR中的應用程序,必須將它加入到您的類路徑中,并用名字調用應用程序的主類。但是使用可執行的JAR文件,我們可以不用提取它或者知道主要入口點就可以運行一個應用程序。可執行JAR有助于方便發布和執行Java應用程序。

對于可執行Jar,在運行java -jar選項的時候,那么環境變量CLASSPATH和在命令行中指定的所有類路徑都將被JVM忽略,也就是說,對于一個可執行Jar,使用java -classpath或者java -cp或者set classpath=lib/commons-io-2.4.jar等等命令指定CLASSPATH都是無效的。

對于一個可執行的JAR必須通過MANIFEST.MF文件的頭引用它所需要的所有其他從屬JAR,引用方式如下

?
1
Class-Path: lib/commons-io-2.4.jar lib/commons-lang3-3.4.jar

如果有多個Jar包那么相互之間使用空格分隔。MANIFEST文件的一般格式如下

?
1
2
3
4
5
6
7
8
9
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangxu
X-Compile-Target-JDK: 1.7
X-Compile-Source-JDK: 1.7
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_45
Main-Class: com.yuewen.statistics.report.service.Main
Class-Path: lib/commons-io-2.4.jar lib/commons-lang3-3.4.jar lib/guava-18.0.jar lib/junit-4.10.jar lib/log4j-api-2.0.jar lib/log4j-core-2.0.jar lib/lombok-1.16.4.jar lib/lucene-analyzers-common-5.5.0.jar lib/lucene-analyzers-smartcn-5.5.0.jar lib/lucene-core-5.5.0.jar lib/lucene-grouping-5.5.0.jar lib/lucene-queries-5.5.0.jar lib/lucene-queryparser-5.5.0.jar lib/mysql-connector-java-5.1.38-bin.jar

其中Manifest-Version表示版本號,一般由IDE工具自動生成,在編寫MANIFEST文件的過程中,有如下注意點

  • Main-Class是jar文件的主類,程序的入口
  • Class-Path指定需要的jar,多個jar必須要在一行上,多個jar之間以空格隔開,如果引用的jar在當前目錄的子目錄下,windows下使用\來分割,linux下用/分割
  • 文件的冒號后面必須要空一個空格,否則會出錯
  • 文件的最后一行必須是一個回車換行符,否則也會出錯

多條java jar命令的執行順序問題

通常情況下,我們會在服務器上配置shell腳本去定時調用自己的Jar包,但是當shell腳本中存在多條java -jar命令時,其執行情況是怎么樣的呢?是同時并行執行,還是挨個按順序執行呢?經過測試得出,多條java -jar命令是按順序執行的,并且只有在第一條java -jar命令執行完畢后,才會執行下一條java -jar命令,依次類推。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲一级视频在线观看 | 天美蜜桃精东乌鸦传媒 | 四虎网址大全 | dasd-698黑人在线播放 | 四虎伊人 | videosxxxx老女人| 天天久久综合网站 | 国产亚洲福利精品一区 | 60岁了天天要小伙子 | 91麻豆国产精品91久久久 | 97视频免费人人观看人人 | 欧美高清在线不卡免费观看 | 黄版快手 | 国产麻豆剧果冻传媒影视4934 | 女同性互吃奶乳免费视频 | 亚洲一区二区三区91 | 精品久久久久久无码人妻国产馆 | 国产精品aaa | 欧美一级片免费看 | 日本性漫画 | 日韩人成 | 国产成人在线视频 | 五月婷婷在线播放 | 嫩草香味 | 青青草国产精品免费 | 国内精品在线播放 | 成人精品视频 成人影院 | h玉足嫩脚嗯啊白丝 | 亚洲国产成人99精品激情在线 | 日韩免费视频播放 | 日韩在线一区二区三区 | 久久AV国产麻豆HD真实 | 草莓视频旧版 | 欧美作爱福利免费观看视频 | 国产91对白在线观看 | 国内视频一区二区 | 91混血大战上海双胞胎 | 欧美三级不卡在线观线看高清 | kuaibo成人播放器 | 青草福利在线 | 亚洲欧洲日产v特级毛片 |