java命令執行來依賴包的jar包
環境
java:1.7
作業系統:win7
伺服器:centos6.5
需求
最近公司因為行情功能的迭代,需要在升級完專案時,進行一次初始化(即:調一個介面)。而公司的沙盒和預環境的升級都是使用jenkins
,所以只要使用指令碼來完成這個初始化的功能。由於公司的請求api
,是需要加上簽名的。所以有點麻煩
我想到的思路:
①先把獲取的簽名的程式單獨抽取出來,單獨弄個小程式。
②然後再使用curl
命令,將api
請求組裝好,傳送就行了。
載入依賴包
-Xbootclasspath/a
-Xbootclasspath/a: 在系統class載入後加載。一般用這個。
-Xbootclasspath/p: 在系統class載入前載入,注意使用,和系統類衝突就不好了.
win32 java -Xbootclasspath/a: some.jar;some2.jar; -jar test.jar
unix java -Xbootclasspath/a: some.jar:some2.jar: -jar test.jar
win32系統每個jar用分號隔開,unix系統下用冒號隔開
將簽名程式,單獨抽成一個小專案後,就需要打包,因為其有依賴第三方jar
,所以我把第三方包也一起打包進去啦!
但是啟動執行時,總是報錯;因為其沒有載入依賴包,也就是說,即使將依賴包打包進去啦,依然不行。
網上搜索一番後,解決了:
java -Xbootclasspath/a:/home/webuser/gogoal_platform/ggopenapi/lib/snakeyaml.jar -jar ./ggsign/ggsign.jar "$appKey" "$appSecret" "$time" "$s uffurl"
注意:
-Xbootclasspath/a:/home/webuser/gogoal_platform/ggopenapi/lib/snakeyaml.jar -jar
我這裡依賴了snakeyaml.jar
這個jar
包,所以需要載入進來,這裡使用了-Xbootclasspath/a
來載入;
以下例子說明是基於:
比如有個叫做test.jar的jar包,裡面有一個擁有main函式的main class:
test.someClassName我們就只要在MANIFEST.MF裡面新增如下一句話:
Main-Class: test.someClassName
然後我們可以在控制檯裡輸入java -jar test.jar即可以執行這個jar。
但是我們這個專案需要引用其他第三方的jar包,在eclipse裡面以專案jar包的形式引用了這個叫做some.jar的包,當時放在專案的lib子目錄下,最後專案打包時把這個some.jar也打進來了,但是用java
-jar執行這個test.jar的時候報找不到Class異常,原因就是jar引用不到放在自己內部的jar包。解決辦法:如下
-Xbootclasspath:完全取代系統Java classpath.最好不用。
-Xbootclasspath/a: 在系統class載入後加載。一般用這個。
-Xbootclasspath/p: 在系統class載入前載入,注意使用,和系統類衝突就不好了.win32 java -Xbootclasspath/a: some.jar;some2.jar; -jar test.jar
unix java -Xbootclasspath/a: some.jar:some2.jar: -jar test.jarwin32系統每個jar用分號隔開,unix系統下用冒號隔開
使用Extension Classloader來載入
你可以把需要載入的jar都扔到%JRE_HOME%/lib/ext下面,這個目錄下的jar包會在Bootstrap Classloader工作完後由Extension Classloader來載入。非常方便,非常省心。
但是這種方式會使得所以的java
程式都去載入這個依賴包。不推薦
還是用AppClassloader來載入,不過不需要classpath引數了
我們在MANIFEST.MF中新增如下程式碼:
Class-Path: lib/some.jar
lib是和test.jar同目錄的一個子目錄,test.jar要引用的some.jar包就在這裡面。
(這裡我剛開始理解成了把lib
資料夾也打包進test.jar
中,實踐後沒有成功,實際情況是lib
和test.jar
,是同一個目錄一個層次級別的)
然後測試執行,一切正常!如果有多個jar包需要引用的情況:
Class-Path: lib/some.jar lib/some2.jar
每個單獨的jar用空格隔開就可以了。注意使用相對路徑。
另:如果META-INF
下包含INDEX.LIST檔案的話,可能會使Class-Path配置失效。INDEX.LIST是Jar打包工具打包時生成的索引檔案,刪除對執行不產生影響。
自定義Classloader來載入
本人沒有實踐,就不說了
總結
以上四種方法都可以用,特別是程式執行在非常單純的環境中時。但是,如果是執行在多工,多應用的環境中時,最好每個應用都能相互獨立,第一種和第二種方案都有可能對其他應用產生影響,因此最好就是選擇第三種和第四種。
參考地址:
相關推薦
java命令執行來依賴包的jar包
環境 java:1.7 作業系統:win7 伺服器:centos6.5 需求 最近公司因為行情功能的迭代,需要在升級完專案時,進行一次初始化(即:調一個介面)。而公司的沙盒和預環境的升級都是使用jenkins,所以只要使用指令碼來完成這個初始化的功
Java如何在專案依賴的jar包中查詢衝突的類
經常在專案中遇到衝突的jar檔案。 使用這個方法可以在本地或者伺服器上面查詢衝突的類。支援模糊查詢。 方便實用的工具,留存備用。 package com.whaty.util; import java.util.*; import java.io.*; public
SpringBoot打包可執行可依賴的jar包
一個Maven+SpringBoot的工程,既需要其生成的jar包能夠直接執行,又可以作為其它工程的依賴包。下面就說一說解決這個場景的思路: 1、spring-boot-maven-plugin預設打包出來的jar是不可依賴的 如果你在SpringBoot工程中使用了spring-boot-ma
用命令編譯、執行java專案(多個原始碼包,依賴第三方jar包)
首先專案的結構採用eclipse嚮導生成的java-web結構,如下圖所示: (其中 Libraries中的hibernate是第三方的庫,位於D:\微雲同步盤\352172935\hibernate_class_tools\hibernate_min\目錄下) 編譯
使用java命令列執行依賴外部jar包的class檔案
很久沒用java的命令列來執行class了,今天拾回來這個,特此記錄 -Djava.ext.dirs=/wd/tomcat6/webapps/wcity/WEB-INF/lib/ 是class依賴的jar包的路徑 java -Djava.ext.dirs=/wd/tomc
java命令執行jar包的方式
運行 -c 必須 loader 自定義 pan ati tcl stat 大家都知道一個java應用項目可以打包成一個jar,當然你必須指定一個擁有main函數的main class作為你這個jar包的程序入口。 具體的方法是修改jar包內目錄META-INF下的MA
Java項目導出為jar包+導出第三方jar包+使用命令行調用+傳參
src jar div pos 新版本 string 輸入 [] ima Java項目導出為jar包+導出第三方jar包+使用命令行調用+傳參 一、打包 情況1:不需要向程序傳參數,並且程序沒有使用第三方jar包 Eclipse上導出jar:
本地執行springboot專案的jar包或阿里雲伺服器上導致,no main異常Exception in thread "main" java.lang.ClassNotFoundException
執行打好的jar包,出現如下異常 首先開啟打好的jar包,出現如下目錄 開啟META-INF目錄,中的MANIFEST.MF檔案,如下 中是否有如下的路徑,Start-Class,如果有,確保是全限定名+啟動類嘛 例如我異常時的Start-Class路徑為
maven命令mvn檢視專案依賴的jar包
C:\software\develop\workplace\test>mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ---------------------------
AndroidStudio開發Java工程(解決java控制檯中文列印亂碼+匯入jar包執行工程)
轉載請註明出處:https://blog.csdn.net/u012932409/article/details/84936189 這篇分享一點個人AS開發java工程經驗,雖然有時候還是得開啟eclipse來執行java專案,但能用AS的時候還是儘量用AS,畢竟一個字
如何使用 java 命令執行含有包的程式
有時候我們會嘗試使用 javac 和 java 命令來讓我們的程式執行起來,一般情況下這是不會出現什麼問題的。但是一旦我們新增包之後,事情就變得有些不可捉摸了,這時候命令不對的話,往往就會出現 “錯誤:找不到或無法載入主類” 這個惱人的錯誤。我們先來簡單復現一
java程式在eclipse上打jar包,Linux上成功執行
、eclipse下的java專案結構如下圖所示: 2、manifest.mf檔案定義如下所示 注意: ① manifest.mf檔案最後一行必須是一個空行。 ② lib/dom4j-1.6.1.jar和lib/jaxen-1.1-beta-7.jar之
eclipse匯出java專案jar包(依賴第三方jar包)
一.在專案根目錄下建一個檔案:MANIFEST.MF 內容: Manifest-Version: 1.0 Class-Path: lib/commons-compress-1.9.jar lib/commons-dbcp2-2.5.0.jar lib/commons-dbutils-1.7.
Maven打包Java版的spark程式到jar包,本地Windows測試,上傳到叢集中執行
作者:翁鬆秀 Maven打包Java版的spark程式到jar包,本地Windows測試,上傳到叢集中執行 文章目錄 Maven打包Java版的spark程式到jar包,本地Windows測試,上傳到叢集中執行 Step1
java專案中依賴的jar包中含有相同類時的載入順序(按照)
類被載入時,會先判斷類是否已經被載入。第二個相同類不被載入。可以在Java Build Path裡調整順序。 1 新建一個javaProject,並打包,如下圖: 2 新建第二個javaProject,並打包,其中的包名和類名及方法都和第一個project一致,只是輸出不同
maven將java專案中依賴的jar包合併到最終的jar中
答: 在pom.mxl中使用shade外掛即可,如下所示: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin<
maven專案依賴本地jar包時編譯生成可執行jar包方法
maven專案需要本地jar包時,在根目錄新建lib目錄,將jar包拷貝到lib目錄並且新增到build path此時直接打可執行jar包會出現編譯報錯、啟動時缺少jar包等問題解決方案: 1.增加編譯外掛, 解決Failed to execute goal org.a
Java專案依賴各jar包的作用和解釋
IKIKAnalyzer3.2.8.jar // 分詞器 ant-junit4.jar // ant junit antlr-2.7.6.jar //沒有此包,hibernate不會執行hql語句。並且會報NoClassDefFoundError:antlr/ANTLREx
將java專案使用maven打成jar包,可在doc視窗直接執行
1、在pom.xml中加上這段程式碼 <build><plugins> <!-- 生成可執行jar --><plugin> <groupId>org.apache.maven.plugins</g
JAVA CMD 編譯java檔案,在需要引入Jar包時,javac和java命令
1. javac -cp ./sigar.jar ./RuntimeTest.java sigar.jar 即是需要引入的Jar包檔案 RuntimeTest.java 是需要編譯的java檔案 2. java -cp .;sigar.jar RuntimeTest