Java打包Jar包后使用腳本執(zhí)行
打包jar包的應(yīng)用場景:
有時候,我們需要將一個java工程,放在服務(wù)器上讓它執(zhí)行。我們知道在IDE中,都是人為操作,執(zhí)行這個程序。但是如果沒有IDE環(huán)境,那么怎么執(zhí)行Java工程呢?
這里,介紹一種jar包打包,并利用cmd執(zhí)行的方式運(yùn)行。
本文的IDE開發(fā)環(huán)境為Eclipse,所以idea環(huán)境開發(fā)的同學(xué)可能不太一樣。
工程建好之后,結(jié)構(gòu)圖如下:
1,創(chuàng)建并編輯MANIFEST.MF文件
如果沒有MANIFEST.MF文件,就需要先創(chuàng)建該文件。該文件的主要作用就是指定依賴項(xiàng)的路徑以及程序執(zhí)行的入口。
下面是一個MANIFEST.MF的示例:
Manifest-Version: 1.0 Class-Path: lib/commons-beanutils-1.7.0.jar lib/commons-collections-3.2.jar lib/commons-httpclient-3.0.1.jar lib/commons-lang-2.4.jar lib/commons-logging-1.0.4.jar lib/concurrent.jar lib/cors-filter-1.7.jar lib/ezmorph-1.0.3.jar lib/gson-2.3.1.jar lib/icu4j_3_2.jar lib/java-property-utils-1.9.jar lib/jpe_sdk.jar lib/jsde_sdk.jar lib/json-lib-2.2.3-jdk15.jar lib/ojdbc14-10.2.0.2.0.jar lib/postgresql-9.2-1004.jdbc4.jar lib/sdoapi.jar Main-Class: entry.RoadSyn
注:
- (1)上面的jar包的路徑意思是和jar包在同一個目錄下的lib文件夾。
- (2)上面的多個jar包路徑之間以空格相隔
- (3)當(dāng)然,上面的class-path有另一種簡單寫法,這種寫法針對的就是lib下全部都是jar包,因此只需要使用lib/*
- (4)Main-Class指的是程序的執(zhí)行入口,例如本例子中,就是entry這個package下的RoadSyn類。該類中定義了main函數(shù)。
- (5)文件的冒號后面必須要空一個空格,否則會出錯
- (6)文件的最后一行必須是一個回車換行符,否則也會出錯
2,屬性文件的路徑
本例中,將屬性文件放在和打包的jar文件一樣的目錄下
對于本例中的讀取屬性文件的函數(shù)如下(提供了以下兩種不同方式):
方法1(打包成jar包之后不需要更改該部分的代碼):
package util; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; public class PropertiesUtil { public static String getProperties(String propertyname, String sKey) { Properties properties = new Properties(); try { InputStreamReader insReader = new InputStreamReader(new FileInputStream(System.getProperty("user.dir")+"\\"+propertyname+".properties"), "UTF-8"); properties.load(insReader); } catch (IOException e) { e.printStackTrace(); } String s = properties.getProperty(sKey); return s; } public static String getProperties(String propertyname) { Properties properties = new Properties(); try { InputStreamReader insReader = new InputStreamReader(new FileInputStream(System.getProperty("user.dir")+"\\"+propertyname+".properties"), "UTF-8"); properties.load(insReader); } catch (IOException e) { e.printStackTrace(); } String s = properties.toString(); return s; } }
上面的user.dir即為程序的運(yùn)行目錄
方法2:
package util; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; public class PropertiesUtil { public static String getProperties(String propertyname, String sKey) { // //方法1,在myeclipse運(yùn)行 // String url = Thread.currentThread().getContextClassLoader() // .getResource("").toString(); // url = url.substring(url.indexOf("/") + 1); // // url = url.replace("%20", " "); // Properties properties = new Properties(); // try { // InputStreamReader insReader = new InputStreamReader(new FileInputStream(url + propertyname + ".properties"), "UTF-8"); // properties.load(insReader); // } catch (IOException e) { // e.printStackTrace(); // } // String s = properties.getProperty(sKey); //方法2,放入jar包 Properties properties = new Properties(); FileInputStream in; try { in = new FileInputStream(propertyname+".properties"); properties.load(in); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } String s=properties.getProperty(sKey); return s; } }
3,打包jar包
利用myeclipse自己的打包功能,選擇自己項(xiàng)目路徑下的MANIFEST.MF文件
導(dǎo)出成jar包
選擇使用工作空間中已有的MANIFEST.MF文件
經(jīng)過上面幾個步驟,就可以完成程序打包的過程了
4,bat文件
然后把所有的文件(包括屬性文件,lib下的jar包,打包之后的jar包,以及執(zhí)行的bat文件)放在同一個目錄下:
上面的bat文件的內(nèi)容為:
java -jar RoadSegSynTool.jar
之后直接執(zhí)行這個文件就可以了
如果是需要在服務(wù)器宕機(jī)情況下,服務(wù)器重啟之后程序自動運(yùn)行,那么可以將該服務(wù)設(shè)置為開機(jī)自啟動,將其添加到開機(jī)自啟動項(xiàng)中,具體操作,移步:
http://www.dbjr.com.cn/article/233463.htm
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java基于阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型示例詳解
這篇文章主要介紹了Java基于阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型,阻塞隊(duì)列的特點(diǎn)就是阻塞兩個字,阻塞功能使得生產(chǎn)者和消費(fèi)者兩端的能力得以平衡,當(dāng)有任何一端速度過快時,阻塞隊(duì)列便會把過快的速度降下來,感興趣的朋友可以參考下2023-12-12Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時對String的+和+=操作會創(chuàng)建StringBuilder對象來進(jìn)行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下2023-01-01Spring Boot集成Java DSL的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Boot集成Java DSL的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01使用注解+RequestBodyAdvice實(shí)現(xiàn)http請求內(nèi)容加解密方式
這篇文章主要介紹了使用注解+RequestBodyAdvice實(shí)現(xiàn)http請求內(nèi)容加解密方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Javaweb請求轉(zhuǎn)發(fā)及重定向?qū)崿F(xiàn)詳解
這篇文章主要介紹了Javaweb請求轉(zhuǎn)發(fā)及重定向?qū)崿F(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07