浅谈两个jar包中包含完全相同的包名和类名的加载问题
2017-09-04 15:48
267 查看
首先从表现层介绍,后续后深入原理。
1、先简单介绍maven如何生成jar文件方便测试
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>Main.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> 配置了一个manifest标签来配置Main函数的入口。然后通过如下指令来实现打包。 mvn assembly:assembly
2、自定义两个jar包,其中包含相同包名和类名
与export的导入顺序有关。只会加载第一个,并且运行正常。
3、自定义jar和jdk包, 其中包含相同的包名和类名
与export的导入顺序有关。同样是只会加载第一个,但是如果加载自定义的jar运行会报错。加载 jdk正常。
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { if (parent != null) { c = parent.loadClass(name, false); } else { c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); // this is the defining class loader; record the stats sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { resolveClass(c); } return c; } }
4、mvn jar包冲突常用命令
mvn dependency:analyze,mvn dependency:tree
以上这篇浅谈两个jar包中包含完全相同的包名和类名的加载问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章推荐
- 关于两个jar包中存在包名和类名都完全相同的jar包冲突问题
- 浅谈JNDI导入两个同名不同路径jar包的先后次序影响程序运行结果的问题
- 关于两个jar包中存在包名和类名都完全相同的问题 (...is not applicable for the arguments...)
- 关于两个jar包中存在包名和类名都完全相同的问题
- 关于两个jar包中存在包名和类名都完全相同的jar包冲突问题
- java执行时的两个常见问题(无法加载主类)
- (转)两个类相互包含引用的问题--类前向声明
- 浅谈jQuery双事件多重加载的问题
- C++两个类相互包含引用的问题
- 利用maven工具解决jar包冲突问题或重复加载问题
- java项目导出jar时图片等资源无法加载问题
- maven项目加载本地jar包的问题
- is not mapped问题,Spring加载jar中配置文件
- IDEA解决Maven创建新项目不加载jar包问题
- maven无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题解决办法
- 开发过程中遇到的两个问题:Input.ResetInputAxes() 和 各个平台XML文件加载
- 从JBOSS启动的问题谈及JBOSS中jar的加载顺序
- 加载jar包的问题
- jqueryMobile 两个页面切换,第二个页面css样式没有加载的问题,已解决
- 开发swt/jface工程的buildpath加载jar包的相关问题