零全零美(www.zzgwt.com)
生活中的很多事情,并不像If...Else那么简单!
posts - 96,comments - 52,trackbacks - 0

    由于开发www.website371.comwww.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 喝茶,老板人不错,对茶这块很专业,不像我这种苦逼的程序员,无聊透顶啊!
文章原创,转载请以超链接形式标明文章原始出处和作者

posted on 2012-07-24 23:44 零全零美 阅读(1495) 评论(1)  编辑  收藏 所属分类: JavaScriptjbpmPL/SQL正则表达式oracleubuntutomcatapache组件设计模式安全相关SEO

FeedBack:
# re: [原创]巧用System.getProperty()编译现有工程的java文件
2012-07-30 00:00 | DB Compare Tool
你不能用ANT吗?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: