/**
* 加载jar,并得到指定的类
*
* @param jarFileName
* @param classFullName
* @return
* @throws MalformedURLException
*/
private Class loadClass(String jarFileName, String classFullName)
throws MalformedURLException {
//要使用URLClassLoader,因为不是同工程下,同工程下可使用ClassLoader
URLClassLoader classLoader = new URLClassLoader(new URL[] { new URL(
jarFileName) });
JarFile jarFile = null;
Class c = null;
try {
jarFile = new JarFile(jarFileName.substring(5));
} catch (IOException e) {
e.printStackTrace();
}
Enumeration<JarEntry> en = jarFile.entries();
while (en.hasMoreElements()) {
JarEntry je = en.nextElement();
String name = je.getName();
String s5 = name.replace('/', '.');
if (s5.lastIndexOf(".class") > 0) {
String className = je
.getName()
.substring(0, je.getName().length() - ".class".length())
.replace('/', '.');
if (classFullName.equals(className)) {
try {
c = classLoader.loadClass(className);
System.out.println(className);
} catch (ClassNotFoundException e) {
System.out.println("NO CLASS: " + className);
} catch (NoClassDefFoundError e) {
System.out.println("NO CLASS: " + className);
}
break;
}
}
}
return c;
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Class clazz = this.loadClass("file:C:" + File.separator + "Main.jar",
"com.test.Main");
System.out.println("开始执行!");
// com.test.Main类中的二个方法,为了测试返回值写死,可以得到类中的方法集合
String[] me_name = new String[] { "main", "a" };
for (int i = 0; i < me_name.length; i++) {
try {
Method me = clazz.getMethod(me_name[i],
new Class[] { new String[] {}.getClass() });
// 方法的返回值,可以给方法加参数
Object object = me.invoke(clazz.newInstance(), new Object[] { new String[] { "111111111" } });
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("开始js!");
}
分享到:
相关推荐
该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件pac
Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例
使用URLClassLoader加载本地文件夹c盘下的test.jar文件
加载jar这一部分很容易,可是卸载jar就没那么容易了。加载jar的时候需要用反射去调用URLClassLoader的addURL方法。}%>jars.jar内
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
NULL 博文链接:https://yklovejava-163-com.iteye.com/blog/1736631
*1.创建 URLClassLoader 类加载器 * 2.获取当前执行的classpath的所有jar包的路径 ...创建任务并执行 * 8.获取执行完成后的返回JavaClassObject类 * 9.创建DynamicClassLoader来加载类 ,defineClass这个方法
在使用spring的aop功能时,这两个jar是必须的,否则会报错,如下: Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net....
学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...
进入到AXMLPrinter2.jar所在目录,使用如下命令,得到的main.txt就是反编译后的文件,现在可以看懂了。 java -jar AXMLPrinter2.jar main.xml > main.txt 2、用baksmali-1.3.0.jar反编译xxx.dex文件 解压xxx.apk,...
执行链实际为:URLClassLoader.class.getConstructor(java.net.URL[].class).newInstance(new
最后发现dex2jar.bat不能直接拖到命令行执行,必须cd切换到dex2jar.bat所在目录下执行>dex2jar.bat classes.dex才行,希望对大家有帮助.. -------------------------------------------------------------------------...
2):网络加载:java.net.URLClassLoader可以加载url指定的类 3):从jar、zip等等压缩文件加载类,自动解析jar文件找到class文件去加载util类 4):从java源代码文件动态编译成为class文件 当一个类被加载、连接、...
规则 5.6 避免完全依赖URLClassLoader和java.util.jar提供的默认自动签名认证机制 规则 6.1 禁止给仅执行非特权操作的代码签名 规范 6.2 不要使用危险的许可与目标组合 规则 6.3 不要禁用字节码验证 规则 6.4 ...
4. 调用方法前,先获取最新的代理类,然后调用代理类的方法。 这样,每次调用代理类中的方法,都会先检查实现类的class文件是否是最新的,如果不是则重新加载,达到动态加载实现类class的目的。 关键字: Java实现热...
首先第一个是 jar 文件的制作,Java 里面直接把 .class ...第二个是,Android 里面虽然也提供了 URLClassLoader 的实现,但是并不能用。要动态加载其它类,可以用的 Class Loader 有: DexClassLoader,PathClassLoader
NULL 博文链接:https://shihuan830619.iteye.com/blog/2160884
at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.load...
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(NativeMethod) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at sun.misc....