首页 > 代码库 > 动态加载jar包(二)
动态加载jar包(二)
上次说的加载jar包,有几个问题没有解决:
1、如果项目包含了其他的jar包如何解决?
2、如何规范上传的jar包的类和方法?
下面就解决一下上面两个问题
一、首先编写被调用的类,这次使用maven工程,并且载入了第三方jar包,阿里巴巴的fastjson包
package com.qunar.hello.hello;import java.util.HashMap;import com.alibaba.fastjson.JSON;public class HelloWorld extends Thread{ public void run(){ HashMap<String, String> m = new HashMap(); m.put("name", "liqiu"); System.out.println(JSON.toJSONString(m)); }}
二、打一个胖包,修改pom.xml,添加build
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qunar.hello</groupId> <artifactId>hello</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hello</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.26</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build> </project>
三、在命令行执行:mvn assembly:assembly
这时候你会发现在target目录出现一个jar:hello-0.0.1-SNAPSHOT-jar-with-dependencies.jar
四、调用这个胖jar包
package com.qunar.studyspring.javajar;import java.net.URL;import java.net.URLClassLoader;import java.lang.reflect.Method;public class JavaJar { public void doJar() { try { URL url = new URL("file:/Users/liqiu/Documents/workspace/hello/target/hello-0.0.1-SNAPSHOT-jar-with-dependencies.jar"); // 这里需要重点看URLClassLoader用法, URLClassLoader loader = new URLClassLoader(new URL[] { url }); // URL跟我们日常见到的格式用法不太一样 Class c = loader.loadClass("com.qunar.hello.hello.HelloWorld"); // 在上面找到并加载jar包后,可以通过此 Thread myObject = (Thread) c.newInstance(); // 函数加载某个类,并使用 newInstance myObject.run(); } catch (Exception ex) { System.out.println(ex); } }}
五、编写测试类
package com.qunar.studyspring;import org.junit.Test;import com.qunar.studyspring.javajar.JavaJar;public class JarTest { @Test public void sayHello(){ JavaJar javajar = new JavaJar(); javajar.doJar(); }}
六、运行的结果是:
{"name":"liqiu"}
动态加载jar包(二)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。