博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射调用jar包main()
阅读量:6121 次
发布时间:2019-06-21

本文共 3869 字,大约阅读时间需要 12 分钟。

hot3.png

package pri.lee.demo;public class HelloWord {	public static void main(String[] args) {		for (int i = 0; i < 100; i++) {			System.out.println("helloword");		}	}}
import java.io.*;import java.lang.reflect.Array;import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader;import java.util.ArrayList;import java.util.Enumeration;import java.util.jar.JarEntry;import java.util.jar.JarFile;import java.util.jar.Manifest;/** * @Author:li * @Date:created in 2018/1/13 11:39 */public class JarTest {    public static void main(String[] args) throws Exception {        String fileName = "C:\\Users\\marje\\Desktop\\HelloWord.jar";        File file = new File(fileName);        String mainClassName = null;        JarFile jarFile;        jarFile = new JarFile(fileName);        //获取主类        Manifest manifest = jarFile.getManifest();        if (manifest != null) {            mainClassName = manifest.getMainAttributes().getValue("Main-Class");        }        jarFile.close();        if (mainClassName == null) {            if (args.length < 2) {                System.exit(-1);            }            // 如果MANIFEST.MF未设置Main-Class,则用户输入        }        mainClassName = mainClassName.replaceAll("/", ".");        final File workDir = File.createTempFile("unjar", "",                new File(System.getProperty("user.dir")));        workDir.delete();        workDir.mkdirs();        if (!workDir.isDirectory()) {            System.err.println("Mkdirs failed to create " + workDir);            System.exit(-1);        }        unJar(file, workDir);        // 设置classPath        ArrayList
classPath = new ArrayList
(); classPath.add(new File(workDir + "/").toURL()); classPath.add(file.toURL()); ClassLoader loader = new URLClassLoader(classPath.toArray(new URL[0])); Thread.currentThread().setContextClassLoader(loader); // 利用反射取得class和method Class
mainClass = Class.forName(mainClassName, true, loader); Method main = mainClass.getMethod("main", Array .newInstance(String.class, 1).getClass()); Object ob = mainClass.newInstance(); // 运行方法 String[] a = new String[3]; main.invoke(ob, (Object) a); System.out.println(1); } public static void unJar(File jarFile, File toDir) throws IOException { JarFile jar = new JarFile(jarFile); try { Enumeration entries = jar.entries(); while (entries.hasMoreElements()) { JarEntry entry = (JarEntry) entries.nextElement(); if (!entry.isDirectory()) { InputStream in = jar.getInputStream(entry); try { File file = new File(toDir, entry.getName()); if (!file.getParentFile().mkdirs()) { if (!file.getParentFile().isDirectory()) { throw new IOException( "Mkdirs failed to create " + file.getParentFile() .toString()); } } OutputStream out = new FileOutputStream(file); try { byte[] buffer = new byte[8192]; int i; while ((i = in.read(buffer)) != -1) { out.write(buffer, 0, i); } } finally { out.close(); } } finally { in.close(); } } } } finally { jar.close(); } }}

转载于:https://my.oschina.net/marjeylee/blog/1606525

你可能感兴趣的文章
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>