不同的jar里边相同的包名类名怎么区别导入

今天在做项目的时候遇到了一个很有意思的问题,折磨了我很长时间,不过最终还是解决了,特留此文纪念一下。

遇到的问题:

同样一段代码,在同事那就好使,在我这就找不到一个方法。引用的包也都是相同的,这种问题还是第一次遇到,怎么办呢?

找啊找啊找原因,查看引用的包,才发现我所引用的包名和同事引用的包名是相同的,不同的是我两引用的包不是一个jar。也就是说不同的jar里包含了相同的包名和类名。

问题的原因找到了,那怎么解决呢?怎么指定调用自己需要的jar中的包呢?

要解决这个问题,还得先了解jvm加载的方法。jvm在加载包的时候,是从classpath的路径从上往下找,找到第一个后就将其引用。

包名类名都相同,那jvm没法区分了,一般ide是会提示发生冲突而报错的,如果不报错的,那就只有第一个包被引入(在classpath路径下排在前面的包),第二个包会在classloader加载类时判断重复而忽略。

知道了jvm加载包的方法,那么解决问题就很容易了,只需要将需要引用包的jar放在前边就可以了,也就是说放在classpath路径的上边。

时间: 2024-08-30 09:17:26

不同的jar里边相同的包名类名怎么区别导入的相关文章

AndroidManifest.xml里加入不同package的component (Activity、Service里android:name里指定的值一般为句号加类名),可以通过指定完全类名(包名+类名)来解决

我们都知道对于多个Activity如果在同一个包中,在Mainfest中可以这样注册 Xml代码   <span style="font-size: small;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=&

eclipse修改android项目的apk包名类名

在Google提供的Eclipse集成开发环境adt-bundle下修改名称的总结: 1.      修改工程名(apk名称) 在弹出的对话框中输入新名称 该操作实际上是修改<project>/.project下的<name>节点.但由于某种原因,只修改该文件的话,在adt-bundle中,显示的工程名称仍然为老名称,只是apk的名称变为了新名称,因此建议通过"重构"的方式为工程改名. 2.      修改手机上<桌面名称> 3.      修改在手

bug_ _java.lang.RuntimeException: Unable to start activity ComponentInfo{包名/类名}

写这篇博文,我顶着很大的压力,贴出来会引来网友的一片鄙视,不贴我又觉得对不起Android SDK研发团队. 本着对全世界Android无产者负责的态度,今天不得不指出Android编译时隐藏的很深的一个Bug. 以下为我的TestActivity类: public class TestActivity extends Activity { private static final String TAG = "TestActivity"; private Button button;

Android 编程下如何修改 jar 文件的包名

首先我们要说说为什么要修改 jar 文件的包名,jar 包我们会非常高频率的使用,尤其是用一些其他三方库的时候,往往把 java 代码打包成 jar 文件,方便项目依赖使用.笔者在开发过程中遇到过一些问题,是由于 jar 文件里面的包名和项目或者运行时环境的引用文件包名上存在冲突导致的,这时候我们修改 jar 文件的包名是一个比较快速有效的解决办法.举两个例子,是笔者亲身经历的两个情况. Gson库:这个相信很多人都在使用,但是直接导入 gson 的 jar 包,在 HTC Desire HD

如何查看Android apk的包名?

有以下四种方法可以查看apk的包名,之后有别的方法,会接着更新文档的. 1. 安装APK包名查看器; 2. 源码AndroidManifest.xml中查看package包名; 3. 利用aapt查看包名: tools或者platform tools或者sdk/build-tools/aapt.exe(进入cmd) aapt dump hadging *.apk 4. adb logcat抓取当前运行的apk的包名:ActivityManager(数字):Displayed 包名/类名:+ ms

通过上传的APK文件,解析APK文件内容,获取应用权限包名等

通过上传的APK文件,解析APK文件内容,获取应用权限包名等 1工具导入: 下载aapt.exe反编译执行程序,放入Java工程资源文件夹下(具体路径自己可定义) 2编写ApkUtil类,获取apk文件信息 public class ApkUtil { public static final String VERSION_CODE = "versionCode"; public static final String VERSION_NAME = "versionName&q

【动态页面】(三)之二:通过自定义注解读取Jar包的类名和属性名

上篇博客介绍了通过反射读取Jar包的类名和属性名,但是问题是读不出类名和属性名的中文注释和属性类型.所以上篇博客埋下了一个伏笔,就是通过自定义注解的方式读取Jar包的类名.属性名.中文注释和属性类型.这篇博客我们就来好好讲讲是如何实现的. 首先先说一下,由于我们的Jar包没有放到项目下,所以就想着怎么能把Jar包添加进来,所以先做了一个类似于上传文件的功能,将Jar上传进来,然后再读取Jar包里面的类名.属性名等一系列属性,再添加到数据库中.总体的思路确定了,下面就开始实施. 首先是上传Jar包

通过jarjar.jar来替换jar包名的详细介绍

有时候我们根据一些场景 需要替换第三方jar包的包名,比如Android广告平台sdk,更换他们jar包包名的话,可以防止市场检测到有广告插件,所以,今天就介绍一下如何使用jarjar.jar工具来替换jar包的包名 一.首先下载jarjar.jar工具 地址在:https://code.google.com/p/jarjar/ 二.下载完以后,使用cmd命令--打开到它所在的目录,它有三个命令: (1)java –jar jarjar.jar   查看帮助信息的 (2)java –jar ja

jar包名修改工具

jar包名修改工具 软件传送门:链接: https://pan.baidu.com/s/12StRdEkYGmMn1DuNSquXSw   提取码: i9w1 闲暇之余,利用jarjar.jar写了一个小工具,没啥技术含量,就是为了方便平时使用,在这里分享一下 : 工具较为简单,基本上是傻瓜式操作,选择jar文件,输入原包名,目标包名,点击修改即可(更多功能请直接用原包修改). 测试修改class.jar 确保安装了sdk并配置了环境变量,cmd或者PowerShell切换到jarPackage