不要轻易在java ext 目录放任何三方jar包

今天在编写一个简单spi 应用demo的时候,在编译时总有一个其他的错误,如下:

 ERROR Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project userloginspi: Fatal error compiling: java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.toImmutableSet()Ljava/util/stream/Collector; -> [Help 1] (org.apache.maven.cli.MavenCli:1091)

因为这个插件一直使用 ,而且类似的代码也写过不可能出问题的,首先怀疑的是maven 工具,但是发现没问题,这个错误的提示实际上是一个guava 包版本的问题,但是项目依赖的guava 已经包含功能了,而且很高了,尝试过以下几个调试

解决流程

  • maven 构建提启用调试
    添加-X 发现依赖的包包含代码,没有问题
  • 只能google了
    大家的说法都是guava 版本,突然看到有人说,guava 已经在classpath了,实际上错误也符合,然后突然想起,当时为了测试yugabytedb 的cdc 功能
    在ext 目录copy 了一个jar 包,因为guava 包在java 开发中如此的方便,基本都会依赖的,删除jar包 ,重新运行问题解决

说明

一般放置三方jar 包到java 的ext 目录,仔细阅读下jar包实现的功能吧,不然排查起来问额就太费事了,折腾了好几个小时,还好最后解决了。
一个经验教训:不要轻易在java ext 目录放任何三方jar包

参考资料

https://stackoverflow.com/questions/52363536/java-lang-nosuchmethoderror-com-google-common-collect-immutablesortedset-toimmu/52363643

原文地址:https://www.cnblogs.com/rongfengliang/p/11708127.html

时间: 2024-07-31 16:55:04

不要轻易在java ext 目录放任何三方jar包的相关文章

用命令行编译java并生成可执行的jar包

用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: package test; import java.awt.*; import javax.swing.*; //更多包的导入... class NotePadFrame extends JFrame { //主界面的设计... } //其他相关代码... public class CardLayo

java如何在项目依赖的jar包中查找冲突的类

原文:java如何在项目依赖的jar包中查找冲突的类 源代码下载地址:http://www.zuidaima.com/share/1785617759915008.htm package com.whaty.util; import java.util.*; import java.io.*; public class JarClassFind { public static int count = 0; static public void main(String[] args) { /* *

java项目导出为可运行jar包

1.选中要导出的项目, 右键->export,选中java下的JAR file->next,选择要导出的路径->next,finish. 2.选中导出的jar文件用压缩文件管理器打开 3.有个META-INF目录,把里面的MANIFEST.MF文件拖出来.此时MANIFEST文件内容应该只有下面这一行: <span style="font-size:24px;"> Manifest-Version:1.0</span> 4.修改MANIFEST

java导出excel不需要额外jar包

目前我知道的在java中导出Excel可以用poi或在jsp的文件头改变输出流.下面再介绍一种就用java基础包导出的Excel.导出的格式形如: 源码如下: package csvExcel; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java

java中使用URLClassLoader访问外部jar包的java类

很多时候 我们写的Java程序是分模块的,有很好的扩展机制,即我们可以为我们自己的java类添加插件,来运行将来某天我们可能开发出来的类,以下称这些类为插件类. 下边是一种简单的实现方法: Class A 作为程序的主入口,其中包含了程序的执行入口(main)函数.然后在main函数中通过外部的配置文件,然后通过外部的配置文件,我们可以获得插件类的信息(位于哪个jar包,jar包的具体路径),然后获得jar包中某一个类的实例,来完成相应的工作.这个jar包很可能是外部的jar包,是我们自己写好的

Java之 将程序打包成jar包

准备材料: 1.java文件: Helloworld.java package com.ray; public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello!jar"); } } 2.指定目录:建一个目录,来存放.class文件和.jar文件. 本文指定目录为 E:\myclass . 一.命令行形式 1.将java文件编译到指定目录: 语法格式为:javac -

关于JAVA的环境变量和那些jar包

大家配置环境变量一般都是 JAVA_HOME:C:\Program Files (x86)\Java\jdk1.6.0_30; PATH:%JAVA_HOME%\bin; CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar. 解释一下: PATH指向搜索命令路径,如果没有配置这个PATH变量指向JDK的命令路径,会发现在命令行下无法运行javac.java等命令: CLASSPAH指向类搜索路径,.;表示在当前目录搜索,由于j

java转换是json需要的jar包导致的问题,

(一),在本项目的WebContent/WEB-INF-lib下有没有导入json所需要的jar, (二),jar包的版本也会导致类似的问题,不如jar包过早或最新版本都会导致. 我用的是: commons-lang3-3.1.jar  出现异常: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 可以看出是因为缺少jar包,但是很明显我已经导入了,为什么还会报这个

Java—Json数据格式转换需要的Jar包

第一节 Jackson 杰克逊技术及Java-Json三类Jar包 Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法. 详见网址 http://itindex.net/detail/51074-java-%E5%88%A9%E7%94%A8-jackson 第二节  Json-lib的Jar文件下载地址 原文地址:json-lib.