|
曾经写的一个eclipse插件有使用到此功能,并写了个装载的工具类,请参考
/**
*
*/
package com.flex.object.build.util;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* @author hualee
*
*/
public class CupClassLoader extends ClassLoader {
/**class的build目录,或class的存放目录*/
private String location = null;
public CupClassLoader(ClassLoader arg0)
{
super(arg0);
}
protected CupClassLoader()
{
super();
}
/**
* 装载编译过的class文件,生成Class返回
*/
public Class findClass(String name)
{
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
/**
* 装载编译过的class文件,返回byte流
* @param fileName
* @return
*/
public byte[] loadClassData(String fileName)
{
String[] ss = fileName.split("\\.");
String files = "";
for(int i=0;i<ss.length;i++){
files =files+"\\"+ss;
}
files = files.substring(1);
try {
// System.out.println(location +files+ ".class");
RandomAccessFile file = new RandomAccessFile(location +"\\"+files+ ".class","r");
byte data[] = new byte[(int)file.length()];
file.readFully(data);
file.close();
return data;
} catch (IOException e)
{
e.printStackTrace();
} catch (Exception ex)
{
ex.printStackTrace();
}
return null;
}
/**
* 设置load class的存放目录
* @param path
*/
public void setClassLocation(String path)
{
location = path;
}
} |
|