由于開發www.website371.com 、www.modaotea.com 兩個網站時使用的框架是自己寫的,其中有一個工具是模擬hibernate的思路,動態生成對象關系映射!中間利用freemarker生成.java類!但是始終存在一個很大的問題,就是生成的.java文件,沒有辦法直接編譯,當然最好的結果當然是自動編譯后能達成JAR包,直接放在工程里!
研究好了半天,終于找到一種解決方案,既然是用JAVA生成.java文件自動編譯并打成JAR包,
那第一步自然就是用JAVA執行CMD命令了(注意多個命令之間要用“&&”隔開哦,在這個問題上浪費了我很多時間!)
第二步:利用javac編譯.java文件(因.java依賴包過多,如果手寫要累死了!!這里正好使用: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);
可以看一下控制臺輸出的代碼,您就明白了:
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 運行時環境版本 |
java.vendor |
Java 運行時環境供應商 |
java.vendor.url |
Java 供應商的 URL |
java.home |
Java 安裝目錄 |
java.vm.specification.version |
Java 虛擬機規范版本 |
java.vm.specification.vendor |
Java 虛擬機規范供應商 |
java.vm.specification.name |
Java 虛擬機規范名稱 |
java.vm.version |
Java 虛擬機實現版本 |
java.vm.vendor |
Java 虛擬機實現供應商 |
java.vm.name |
Java 虛擬機實現名稱 |
java.specification.version |
Java 運行時環境規范版本 |
java.specification.vendor |
Java 運行時環境規范供應商 |
java.specification.name |
Java 運行時環境規范名稱 |
java.class.version |
Java 類格式版本號 |
java.class.path |
Java 類路徑 |
java.library.path |
加載庫時搜索的路徑列表 |
java.io.tmpdir |
默認的臨時文件路徑 |
java.compiler |
要使用的 JIT 編譯器的名稱 |
java.ext.dirs |
一個或多個擴展目錄的路徑 |
os.name |
操作系統的名稱 |
os.arch |
操作系統的架構 |
os.version |
操作系統的版本 |
file.separator |
文件分隔符(在 UNIX 系統中是“/”) |
path.separator |
路徑分隔符(在 UNIX 系統中是“:”) |
line.separator |
行分隔符(在 UNIX 系統中是“/n”) |
user.name |
用戶的賬戶名稱 |
user.home |
用戶的主目錄 |
user.dir |
用戶的當前工作目錄 |
本文所提供的方法解決了使用JAVA動態編譯現有工程中的源文件的簡便方法,順便說一下有空可以去
www.modaotea.com 喝茶,老板人不錯,對茶這塊很專業,不像我這種苦逼的程序員,無聊透頂啊!
文章原創,轉載請以超鏈接形式標明文章原始出處和作者