由于開發(fā)www.website371.com 、www.modaotea.com 兩個(gè)網(wǎng)站時(shí)使用的框架是自己寫的,其中有一個(gè)工具是模擬hibernate的思路,動(dòng)態(tài)生成對(duì)象關(guān)系映射!中間利用freemarker生成.java類!但是始終存在一個(gè)很大的問(wèn)題,就是生成的.java文件,沒有辦法直接編譯,當(dāng)然最好的結(jié)果當(dāng)然是自動(dòng)編譯后能達(dá)成JAR包,直接放在工程里!
研究好了半天,終于找到一種解決方案,既然是用JAVA生成.java文件自動(dòng)編譯并打成JAR包,
那第一步自然就是用JAVA執(zhí)行CMD命令了(注意多個(gè)命令之間要用“&&”隔開哦,在這個(gè)問(wèn)題上浪費(fèi)了我很多時(shí)間!)
第二步:利用javac編譯.java文件(因.java依賴包過(guò)多,如果手寫要累死了?。∵@里正好使用:System.getProperty("java.class.path"))
第三步:利用jar命令打包
全部代碼如下:
public final static String FILE_PATH = "d:\\db2java\\";
public final static String PACKAGE_PATH = "com/zzsb/beans/";
public final static String CLASS_FILE_PATH = FILE_PATH+"classes";
String cmd = "cmd /c cd /d " + FILE_PATH +
" && " +
"javac -classpath "+ System.getProperty("java.class.path") +" "+ FILE_PATH+PACKAGE_PATH + "*.java " +
" && " +
"jar cf bean-"+TABLE_SCHEMA+"-"+ DateUtil.getCurrentDate14() +".jar " + PACKAGE_PATH+"*.class" +
" && " +
"jar cf bean-source-"+TABLE_SCHEMA+"-"+ DateUtil.getCurrentDate14() +".jar " + PACKAGE_PATH+"*.java" +
" && " +
"jar cf bean-all-"+TABLE_SCHEMA+"-"+ DateUtil.getCurrentDate14() +".jar " + PACKAGE_PATH+"*.*"
;
System.out.println(cmd);
Process p = Runtime.getRuntime().exec(cmd);
可以看一下控制臺(tái)輸出的代碼,您就明白了:
cmd /c cd /d d:\db2java\ && javac -classpath E:\job\workspace\DianLiang\WebRoot\WEB-INF\classes;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\acegi-security-1.0.7.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\activation.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\axis.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\axis-ant.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\bonecp-0.7.1.RELEASE.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-attributes-api.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-attributes-compiler.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-beanutils-1.8.3.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-cli-1.2.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-codec-1.3.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-collections-3.2.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-configuration-1.4.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-discovery-0.2.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-fileupload-1.2.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-io-2.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-lang-2.5.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-logging.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\commons-pool-1.4.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\ezmorph-1.0.6.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\freemarker.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\guava-r09.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\javassist.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jaxrpc.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jdbcspy.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jodconverter-2.2.2.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jodconverter-cli-2.2.2.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\json_simple-1.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\json-lib-2.2.3-jdk15.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\juh-3.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jurt-3.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\jxl.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\kaptcha-2.3.2.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\log4j-1.2.15.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\mail.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\mysql-connector-java-5.1.13-bin.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\ognl-2.7.3.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\quartz-2.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\ridl-3.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\saaj.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\slf4j-api-1.6.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\slf4j-jdk14-1.6.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\unoil-3.0.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\urlrewrite-3.2.0.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\wsdl4j-1.5.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\xstream-1.3.1.jar;E:\job\workspace\DianLiang\WebRoot\WEB-INF\lib\bean-dianliang-20120723181047.jar d:\db2java\com/zzsb/beans/*.java && jar cf bean-dianliang-20120724232924.jar com/zzsb/beans/*.class && jar cf bean-source-dianliang-20120724232924.jar com/zzsb/beans/*.java && jar cf bean-all-dianliang-20120724232924.jar com/zzsb/beans/*.*
看看System.getProperty()都為我們提供了什么有用信息吧!
java.version |
Java 運(yùn)行時(shí)環(huán)境版本 |
java.vendor |
Java 運(yùn)行時(shí)環(huán)境供應(yīng)商 |
java.vendor.url |
Java 供應(yīng)商的 URL |
java.home |
Java 安裝目錄 |
java.vm.specification.version |
Java 虛擬機(jī)規(guī)范版本 |
java.vm.specification.vendor |
Java 虛擬機(jī)規(guī)范供應(yīng)商 |
java.vm.specification.name |
Java 虛擬機(jī)規(guī)范名稱 |
java.vm.version |
Java 虛擬機(jī)實(shí)現(xiàn)版本 |
java.vm.vendor |
Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商 |
java.vm.name |
Java 虛擬機(jī)實(shí)現(xiàn)名稱 |
java.specification.version |
Java 運(yùn)行時(shí)環(huán)境規(guī)范版本 |
java.specification.vendor |
Java 運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商 |
java.specification.name |
Java 運(yùn)行時(shí)環(huán)境規(guī)范名稱 |
java.class.version |
Java 類格式版本號(hào) |
java.class.path |
Java 類路徑 |
java.library.path |
加載庫(kù)時(shí)搜索的路徑列表 |
java.io.tmpdir |
默認(rèn)的臨時(shí)文件路徑 |
java.compiler |
要使用的 JIT 編譯器的名稱 |
java.ext.dirs |
一個(gè)或多個(gè)擴(kuò)展目錄的路徑 |
os.name |
操作系統(tǒng)的名稱 |
os.arch |
操作系統(tǒng)的架構(gòu) |
os.version |
操作系統(tǒng)的版本 |
file.separator |
文件分隔符(在 UNIX 系統(tǒng)中是“/”) |
path.separator |
路徑分隔符(在 UNIX 系統(tǒng)中是“:”) |
line.separator |
行分隔符(在 UNIX 系統(tǒng)中是“/n”) |
user.name |
用戶的賬戶名稱 |
user.home |
用戶的主目錄 |
user.dir |
用戶的當(dāng)前工作目錄 |
本文所提供的方法解決了使用JAVA動(dòng)態(tài)編譯現(xiàn)有工程中的源文件的簡(jiǎn)便方法,順便說(shuō)一下有空可以去
www.modaotea.com 喝茶,老板人不錯(cuò),對(duì)茶這塊很專業(yè),不像我這種苦逼的程序員,無(wú)聊透頂?。?br />文章原創(chuàng),轉(zhuǎn)載請(qǐng)以超鏈接形式標(biāo)明文章原始出處和作者