/*
?* 创建日期 2004-7-2
?* 创建人 HongSoft
?* 文件名 TestCompile.java
?*/
package com.hongsoft.test;
import java.io.*;
//定制的类装入器
public class TestCompile extends ClassLoader
{
?String _compiler;
?String _classpath;
?public static void main(String[] args)
?{
??new TestCompile();
?}
?public TestCompile()
?{
??super(ClassLoader.getSystemClassLoader());
??//默认编译器
??if (_compiler == null)
???_compiler = "D:\\j2sdk1.4.2\\bin\\javac";
??_classpath = ".";
??String extraclasspath =
???"c:\\Program Files\\Java\\j2re1.4.2\\lib\\rt.jar";
??// = System.getProperty("calc.classpath");
??if (extraclasspath != null)
??{
???_classpath =
????_classpath
?????+ System.getProperty("path.separator")
?????+ extraclasspath;
??}
??compile();
?}
?public void compile()
?{?????
??String filename = "";
??String classname = "";
??try
??{
???//创建临时文件
???File javafile =
????File.createTempFile("compiled_", ".java", new File("."));
???filename = javafile.getName();
???classname = filename.substring(0, filename.lastIndexOf("."));
???generateJavaFile(javafile, classname);
???//编译文件
???invokeCompiler(javafile);
???//创建java类
???byte[] buf = readBytes(classname + ".class");
???Class c = defineClass(buf, 0, buf.length);
???try
???{
???????c.newInstance();
???}
???catch (IllegalAccessException e)
???{
????throw new RuntimeException(e.getMessage());
???}
???catch (InstantiationException e)
???{
????throw new RuntimeException(e.getMessage());
???}
??}
??catch (IOException e)
??{
???throw new RuntimeException(e.getMessage());
??}
?}
?//生成java文件
?void generateJavaFile(File javafile, String classname) throws IOException
?{
??FileOutputStream out = new FileOutputStream(javafile);
??String text =
???"public class "
????+ classname
????+ " {"
????+ " public int getCreater() {return 1;}"
????+ "}";
??out.write(text.getBytes());
??out.close();
?}
?//编译java文件
?void invokeCompiler(File javafile) throws IOException
?{
??String[] cmd =
???{ _compiler, "-classpath", _classpath, javafile.getName()};
??//执行编译命令
??//A1:
??Process process = Runtime.getRuntime().exec(cmd);
??try
??{ //等待编译器结束
???process.waitFor();
??}
??catch (InterruptedException e)
??{
??}
??int val = process.exitValue();
??if (val != 0)
??{
???throw new RuntimeException("编译错误:" + "错误代码" + val);
??}
?}
?//以byte数组形式读入类文件
?byte[] readBytes(String filename) throws IOException
?{
???File classfile = new File(filename);
??byte[] buf = new byte[(int) classfile.length()];
??FileInputStream in = new FileInputStream(classfile);
??in.read(buf);
??in.close();
??return buf;
?}
}
分享到:
相关推荐
四种动态生成Java代码的方法四种动态生成Java代码的方法
1、本地执行代码生成工具,可生成controller、service、repository、entity、mapper、mapper.xml的增删改查代码。生成的文件复制到项目路径中,修修改改即可实现大部分CRUD功能。 2、工具不需要导入到项目中,本地...
wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径, wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径
WebService的WSDL文件生成Java代码工具
Java动态生成代码并编译载入 Java动态生成代码并编译载入
java代码自动生成工具,可按个人需求自由扩展。
protobuf java代码生成,protobuf java代码生成,protobuf java代码生成,protobuf java代码生成
支持java类的自动生成,一键生成所有代码,方便修改,维护
根据数据库自动生成JAVA代码 实体类 dao service controller jsp html 模版
使用xsl来动态生成java代码,值得探讨
axis2根据wsdl生成java客户端代码 D:\Software\axis2-1.6.2\bin>wsdl2java.bat -uri http://10.33.30.216:9099/facs/services/ResourceSynchroWebService?wsdl -o E:\wsdloutput -p com.util wsdl2java.bat -uri ...
利用freemarker生成MVC代码,避免做大量重复的复制黏贴替换工作,更专注在业务代码实现和难度更大的技术问题上,提高工作效率
实现java代码生成cer证书文件,然后可以通过代码获取 不通过keytool工具。生成密钥对。使用公钥加密。
卡密自动生成代码 java代码 有兴趣的看看 来吧来吧卡密自动生成代码卡密自动生成代码卡密自动生成代码卡密自动生成代码
java代码生成工具,使用freemarker做模版,resource下有模版的例子,可以自己定义需要生成的模版进行生成。暂时只开发了controller,service ,impl的模版。
利用java实现简单动态生成word模版 项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 ...
1.codeFactory: Java代码生成,依赖rapid-generator.4.0.6.jar, 支持自定义模板生成代码, 弱业务下完全解放体力劳动. 2.ssm模板实现:pojo,dao,daoimpl,service,serviceimpl,controller,各mapper.xml 代码自动生成, 3....
# 本项目主要介绍 1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类...复杂word动态生成上功能很强大
不知道怎么上传系统图片,java自动生成jsp,controller,service及实现类,mapper,操作简单,只需要自己在系统管理-代码生成里面进行操作即可,系统最后会导出具体操作文档,内自带mysql数据库脚本,源码需要在Tomcat...
更具表结构自动生成Dao,xml,Entity。只需要修改对于的XML即可灵活配置