1. 程式人生 > >java命令執行來依賴包的jar包

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.jar

win32系統每個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中,實踐後沒有成功,實際情況是libtest.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