精华内容
下载资源
问答
  • )V是关于不同jar包相同类名错误,这种错误经常出现在同一个工程使用不同版本的jar中。 当包名类名都相同,jvm无法区分,一般ide是会提示发生冲突而报错的,如果不报错的,那就只有第一个包被引入(在classpath路径...

    解析:

    (Ljava/lang/String;)V是关于不同jar包相同类名错误,这种错误经常出现在同一个工程使用不同版本的jar中。
    当包名类名都相同,jvm无法区分,一般ide是会提示发生冲突而报错的,如果不报错的,那就只有第一个包被引入(在classpath路径下排在前面的包或者是pom文件前面的依赖),第二个包会在classloader加载类时判断重复而忽略。如下图的错误,就是在不同jar包里面存在着相同包名类名,在调用时候,使用的jar里的方法使用String参数(想用第二个包的方法),但可用jar里面是没有带String参数的方法(实际调用的是第一个jar的方法),然后就产生了下图的错误。
    在这里插入图片描述

    解决方法:

    1.将第二个包带有与第一包相同的包名或者类名进行修改。(笔者是第二个包的源码进行编辑,然后重新编译打包,将包名修改,然后重新添加到工程中)
    2.将两个包整合成一个包使用。
    3. 自定义类加载器,用来管理私有的class或jar,比如只加载指定目录下的class或者jar。根据如下图的class装载的流程,我们知道,重载类加载器中findClass方法是行之有效的(当然也可以扩展具体的ClassLoader,比如URLClassLoader,它已经将findClass逻辑写好,就不需要重写。只需要addURL(jar url)即可),loadClass不变可以保证不打破双亲委派机制

    使用第三种方法可参考:https://blog.csdn.net/sucabit/article/details/84309422

    展开全文
  • Maven依赖jar包冲突常见的解决方法

    千次阅读 2020-12-23 04:55:47
    项目中,经常会遇到ClassNotFound,NoSuchMethod异常,第一反应往往是类路径不对,jar没有正确的引用。...一 造成jar 冲突的原因:如果项目中存在对同一jar不同版本依赖的时候,maven 2根据最近原则,默认引用最靠...

    项目中,经常会遇到ClassNotFound,NoSuchMethod异常,第一反应往往是类路径不对,jar没有正确的引用。第一步判断jar是否加载,还是 加载的jar由于maven依赖管理存在传递依赖,造成依赖的jar版本号不对,相应的类找不到,或者是相应类版本不对,没有对应的方法。

    一 造成jar 冲突的原因:如果项目中存在对同一jar不同版本依赖的时候,maven 2根据最近原则,默认引用最靠近项目版本的jar,maven 2.0.9会根据最先声明原则 来引用相应版本的jar;无论那种方式,都会出现jar包冲突。在这里提一下gradle依赖,会依赖最新版本的jar。

    二 判断jar是否正确的被引用 有两种方法:

    1在项目启动时加上VM参数:-verbose:class

    项目启动的时候会把所有加载的jar都打印出来 类似如下的信息:

    classpath加载的jar

    -classpath /home/yao/tool/jdk1.8.0_25/jre/lib/jce.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/resources.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/management-agent.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/jfxswt.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/plugin.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/javaws.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/charsets.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/jsse.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/deploy.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/jfr.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/ext/localedata.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/ext/nashorn.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/ext/jfxrt.jar:

    /home/yao/tool/jdk1.8.0_25/jre/lib/ext/sunjce_provider.jar:

    ...............等等

    具体load的类

    [Loaded java.lang.Object from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.io.Serializable from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.Comparable from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.CharSequence from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.String from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.reflect.AnnotatedElement from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.reflect.GenericDeclaration from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.reflect.Type from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    [Loaded java.lang.Class from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

    ..................等等

    我们可以通过上面的信息查找对应的jar是否正确的被依赖,具体类加载情况,同时可以看到版本号,确定是否由于依赖冲突造成的jar引用不正确;

    2 通过maven自带的工具:‍‍mvn dependency:tree

    具体后面可以加 -Dverbose 参数 ,详细参数可以去自己搜,这里不详细介绍。

    比如分析如下POM

    运行: mvn dependency:tree -Dverbose

    org.apache.poi

    poi

    3.2-FINAL

    commons-beanutils

    commons-beanutils

    1.7.0

    输出结果:

    [INFO] ------------------------------------------------------------------------

    [INFO]

    [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Dependency ---

    [INFO] com.yao:Dependency:pom:1.0-SNAPSHOT

    [INFO] +- org.apache.poi:poi:jar:3.2-FINAL:compile

    [INFO] | +- commons-logging:commons-logging:jar:1.1:compile

    [INFO] | | \- log4j:log4j:jar:1.2.13:compile

    [INFO] | \- (log4j:log4j:jar:1.2.13:compile - scope updated from runtime; omitted for duplicate)

    [INFO] \- commons-beanutils:commons-beanutils:jar:1.7.0:compile

    [INFO] \- (commons-logging:commons-logging:jar:1.0.3:compile - omitted for conflict with 1.1)

    [INFO] ------------------------------------------------------------------------

    通过里面的信息可以看到 两个jar都commons-logging存在依赖,但是版本不同。里面的详细信息显示引用了 commons-logging:commons-logging:jar:1.1 去掉了commons-logging:commons-logging:jar:1.0.3 (omitted for duplicate)。

    通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的jar;

    三 通过Idea intellij 中的Show Dependencies的工具去除重复的jar

    在Pom.xml文件上右击 选择 Diagrams -> Show Dependencies 即可查看Pom的依赖图,通过图可以很容易的看到依赖冲突的jar,exculude掉不想要的版本jar即可。

    展开全文
  • [TOC]背景:一个工程要打成jar包,一般两种情况,要么是打成一个工具jar让别人引用,要么打成一个可执行jar包。那么不使用maven的情况下通过IDE如eclipse来打包怎么做这两件事呢.也同时介绍通过命令行打包方式...

    [TOC]

    背景:一个工程要打成jar包,一般两种情况,要么是打成一个工具jar让别人引用,要么打成一个可执行jar包。那么不使用maven的情况下通过IDE如eclipse来打包怎么做这两件事呢.也同时介绍通过命令行打包方式

    eclipse打工具jar

    1.项目右键–>export -->搜索java

    37ffbaf17db63fe5f0839fe74d80e55a.png

    2.选择JAR file

    3.打包

    d66b1e80193d8331ba0135431f47c5f3.png

    这里如果直接finish就没有设置Main Class,也就是执行主类,但这样打包一般都只是打成工具包,所以一般都不需要设置MainClass

    eclipse打包可执行jar

    1.项目右键–>export -->搜索java(参考上图)

    2.选择Runnable JAR file

    3.打包如下

    24fdacdb0af0ff3c4fd05359b81ffc07.png

    java命令行打包

    先打开命令提示符cmd,输入javac help,然后回车,看到:

    用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 …

    选项:

    -c 创建新的存档

    -t 列出存档内容的列表

    -x 展开存档中的命名的(或所有的〕文件

    -u 更新已存在的存档

    -v 生成详细输出到标准输出上

    -f 指定存档文件名

    -m 包含来自标明文件的标明信息

    -0 只存储方式;未用zip压缩格式

    -M 不产生所有项的清单(manifest〕文件

    -i 为指定的jar文件产生索引信息

    -C 改变到指定的目录,并且包含下列文件:

    如果一个文件名是一个目录,它将被递归处理。

    清单(manifest〕文件名和存档文件名都需要被指定,按’m’ 和 'f’标志指定的相同顺序。

    可参考:https://www.cnblogs.com/mq0036/p/3885399.html

    java -jar运行jar包找不到依赖包的解决方法

    这个就是看jar包中生成的META-INF/MANIFEST.MF文件中的配置了,这个文件是打jar包时生成的,但也可以手动修改替换,必须要有。

    对于运行jar然后找不到依赖的jar包解决方案:

    方案1:最不推荐

    把依赖的jar全部放到JRE的扩展类文件夹中(%JAVA_HOME%/jre/lib/ext)

    方案2:手动添加Class-Path正确方法

    Manifest-Version: 1.0

    Class-Path: . testPackage2_lib/fastjson-1.2.38.jar

    Main-Class: com.mym.practice.testpackage.MainClass

    1

    2

    3

    需要注意的是,

    (1)有多个jar引用要换行写

    (2)注意Class-Path的冒号与右边字符有空格,并且有个点“.”不能漏了,看很多文章都没有说到这个点,导致即使加了这个也没用。这个点的由来可以参考配置jdk环境变量配置classpath时是一样的

    方案3:出现这样的问题基本就是打包方式问题,检查自己的打包方式。

    方案4:换成maven工程,通过配置插件打包很便捷

    展开全文
  • maven依赖时出现多个版本时,会使用哪个版本
  • 之前遇到jar包引用重复的问题,负责组长告知一种解决方案,特此记录 android项目中出现多处引用jar包时,可能编译时会出现 重复引用的 exception,此时在采用provided引入 将XXXXX(jar包名).jar该jar包放入lib下,...
  • 一, module配置gradle 生成jar包apply plugin: 'com.android.library' ---》A......task deleteOldJar(type: Delete) { ---》Bdelete 'build/outputs/test.jar'}task exportBTJar(type: Copy) {---》Bfrom('build/...
  • 直接依赖jar包这种方式简单直白,项目下载后在正确的ide或者稍微做转换就可以运行起来。比如java web工程的WEB-INF/lib下只要按这个步骤Java Build Path=>Add Libraty=>Web App Libraries添加依赖jar包即可...
  • 代码中用到的是commons-collections的3.1版本特性,但是资源库中commons-dbcp依赖的commons-collections指定了2.1版本。看了下commons-dbcp-1.2.1.pom:commons-collectionscommons-collections2.1当我将...
  • maven仓库的ear里面很多个相同jar(只是包含不同的:版本+时间戳)问题描述: 发现ear里面很多个相同jar,只是包含不同的:版本+时间戳,如下图所示:(例如:itoo-basic-api很多相同jar,只是包含不同的:...
  • jvm 加载名和类名相同的类时,先加载classpath中jar路径放在前面的,名类名都相同,那jvm没法区分了,如果使用ide一般情况下是会提示发生冲突而报错,若不报错,只有第一个包被引入(在classpath路径下排在前面...
  • 在Linux服务器中将已打包好的用于部署的jar包替换其中代码依赖jar包 以替换/opt/aaa/test/xxx.jar为例,将其中依赖的log4j-api-2.14.0.jar替换为log4j-api-2.15.0.jar cd /opt/aaa/test mkdir temp1213 # 新建一...
  • 多次遇见一个奇怪的问题是,maven加载jar包的时候,在pom.xml中有些jar包没有报错,如果去本地仓库下查看jar包,发现jar又正常下载好了,代码里也会报错,报错的原因是jar依赖jar包没有下载下来。 简而言之,子...
  • jar包依赖整理(一)

    2021-02-12 15:36:14
    整理一些小工具の 依赖方便用的时候好找一些jackson:主要用于json处理:Java对象与Json互相转换com.fasterxml.jackson.corejackson-annotations2.10.3com.fasterxml.jackson.corejackson-databind2.10.3依赖简单...
  • 1 使用maven-shade-plugin(1) 在项目的pom.xml文件中加入如下插件:org.apache.maven.pluginsmaven-shade-plugin3.2.0truepackageshadecom.healchow....(3) 打包完成后, 即可在项目的target目录下看到生成的jar包...
  • 依赖冲突是日常开发中经常碰到的过程,如果运气好,没碰到过这个问题同学可能没什么感觉,并不会什么问题。 没碰到过这个问题同学可能没什么感觉,小编举两个最近碰到例子,让大家感受一些。 举个栗子1: 个...
  • 对接不同公司时,由于用到了bouncycastle进行签名,都是其他公司封装好的jar包或方法依赖了bouncycastle系列的包,由于各种原因必须同时使用不同版本的包。 直接引用会报类重复加载的问题,由于java类加载使用双亲...
  • 我们在maven项目中会通过坐标来引入jar包,而maven本身依赖传递的特性,就是说我们使用坐标引入A,而A又依赖了B,这时候我们无需在pom.xml文件中显示的引入B,因为B会根据maven依赖传递的特性自动引入。...
  • maven 依赖jar包时版本冲突的解决: mvn dependency:tree -Dverbose image.png四种解决方式:1、第一声明优先原则:在pom.xml配置文件中,如果两个名称相同版本不同依赖声明,那么先写的会生效。所以,先声明...
  • 方法一:可以通过调整的顺序来解决,但是这个方法一个问题,就是每次更新maven依赖的时候会需要重新调整的顺序,很麻烦,下面的是别人的解决方案: 关于两个Jar包中存在相同名和类名的冲突问题_E路之吕-...
  • java程序用maven打包的时默认没有加入依赖jar包的,这是需要修改下pom文件,加入如下plugin4.0.0...
  • 但是在实际的情况中往往会重复依赖的问题,比如创建的工程A,依赖了b-1.0.jar,而b-1.0.jar依赖了d-1.0.jar(这个我们本身是不能直接看到的),同时我们自己的工程又依赖了d-2.1.jar,或者工程A依赖了c-1.0.jar,c...
  • MAVEN项目运行中如果报如下错误:Causedby:java.lang.NoSuchMethodError...当我们需要A的依赖的时候,就会在pom.xml中引入A的jar包;而引入的A的jar包中可能又依赖B的jar包,这样Maven在解析pom.xml的时候,会依次将...
  • 10月24日是程序员节,1024 =210、210既210之意。用好这几个技巧,解决Maven Jar包冲突易如反掌前言大家在项目中肯定碰到过Maven的Jar包冲突问题,...明明在依赖这个Jar包啊。怎么运行不了!?2、项目中明明...
  • 前言 大家好,我是小马。最近在开发一些新系统,昨天发现一个系统的jar包突然变大好多,其他系统几十mb,它246mb,传输...使用压缩工具解压jar,到BOOT-INF\lib下,根据大小排序,发现一组前缀相同jar包,体积都超
  • 经常的,在android 开发中,项目普遍的喜欢引入大量的第三方库,在完成项目功能需求的同时,也可以减少自己项目的代码量。何乐而不为。...因此复杂的依赖关系容易产生重复导入jar包,重复引用jar...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,274
精华内容 39,309
关键字:

不同的jar包有相同的依赖