runtime过程中,常见jar问题解决 (Intellij)

source download

Intellij IDEA 有时候不下载不了 code,使用如下命令,在“terminal”下运行

mvn dependency:resolve -Dclassifier=sources
io.netty
java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.<init>

此类问题报错,主要是io.netty 多个jar 冲突导致。、

使用以下命令查看同一个jar 有哪些版本

mvn dependency:tree

对一些不愿意引入的依赖加上 exclusion

<exclusions>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty-common</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty-buffer</artifactId>
                </exclusion>
            </exclusions>

需要注意的是 netty-all 不能顶替所有其他的netty的依赖,比如 netty-common

<exclusions>
            	 <exclusion>
                    <groupId>io.netty</groupId>
		    <artifactId>netty-all</artifactId>
            	 </exclusion>
             </exclusions>  

java.lang.NoSuchMethodError

java.lang.NoSuchMethodError通常是由于方法在运行时无法找到而引发的错误。可能的原因包括:

版本不匹配:方法可能在编译时存在,但在运行时的类路径中找不到匹配的版本。这可能是因为编译时使用了一个版本的库,而运行时使用了另一个版本的库。

依赖冲突:项目中可能存在多个依赖项,这些依赖项可能包含不同版本的相同类。当存在这种情况时,编译器可能会选择其中一个版本,而运行时却可能加载另一个版本,导致找不到方法。

比如:

2024-05-10 11:47:55,507 [ERROR] [Executor task launch worker for task 0.0 in stage 0.0 (TID 0)] TaskResources: Task 0 failed by error: 
java.lang.NoSuchMethodError: org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.<init>(ZZZ)V
        at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.$anonfun$mergeSchemasInParallel$1(ParquetFileFormat.scala:565)
        at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.$anonfun$mergeSchemasInParallel$1$adapted(ParquetFileFormat.scala:563)
        at org.apache.spark.sql.execution.datasources.SchemaMergeUtils$.$anonfun$mergeSchemasInParallel$2(SchemaMergeUtils.scala:76)

在 Scala 中,.init(ZZZ)V 也是一个方法的描述符,类似于 Java 中的构造函数描述符。让我们来逐步解释这个描述符:

.:表示该方法是类的构造函数,因为构造函数在 Scala 中同样是通过类名调用的。
<init>:这同样是 Scala 中构造函数的特殊名称。与 Java 类似,Scala 也将构造函数编码为 <init>。
(ZZZ)V:这是构造函数的描述符,指定了构造函数的参数类型和返回类型。
(ZZZ):表示构造函数接受三个参数,均为布尔类型(Z 表示布尔类型,Z 后面的 Z 表示第二个布尔参数,依此类推)。
V:表示构造函数的返回类型为 void,即构造函数不返回任何值。
因此,.<init>(ZZZ)V 可以理解为一个接受三个布尔型参数的构造函数,它的类名由前面的调用者(.)确定。这个描述符在堆栈跟踪中通常用来标识正在调用的构造函数。在 Scala 中,构造函数的描述符与 Java 中的略有不同,但基本思想是相同的。
classnotfound 问题
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.util.LookupCache

需要引入如下的依赖

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.4.1</version>
            <scope>compile</scope>
        </dependency>
类加载问题

maven。scope元素主要用来控制依赖的使用范围,指定当前包的依赖范围和依赖的传递性,也就是哪些依赖在哪些classpath中可用。常见的可选值有:compile, provided, runtime, test, system等。

compile:默认值。compile表示对应依赖会参与当前项目的编译、测试、运行等,是一个比较强的依赖。打包时通常会包含该依赖,部署时会打包到lib目录下。比如:spring-core这些核心的jar包。

provided:provided适合在编译和测试的环境,和compile功能相似,但provide仅在编译和测试阶段生效,provide不会被打包,也不具有传递性。比如:上面讲到的spring-boot-devtools、servlet-api等,前者是因为不需要在生产中热部署,后者是因为容器已经提供,不需要重复引入。

runtime:仅仅适用于运行和测试环节,在编译环境下不会被使用。比如编译时只需要JDBC API的jar,而只有运行时才需要JDBC驱动实现。

test:scope为test表示依赖项目仅参与测试环节,在编译、运行、打包时不会使用。最常见的使用就是单元测试类了。

system:system范围依赖与provided类似,不过依赖项不会从maven仓库获取,而需要从本地文件系统提供。使用时,一定要配合systemPath属性。不推荐使用,尽量从Maven库中引用依赖。

import: import scope只能用在dependencyManagement里面。表示从其它的pom中导入dependency的配置。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
    at org.apache.spark.sql.execution.datasources.v2.odps.SparkHiveExample$.main(SparkHiveExample.scala:42)
    at org.apache.spark.sql.execution.datasources.v2.odps.SparkHiveExample.main(SparkHiveExample.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 2 more

在这里插入图片描述
如果以上不生效,
那就去掉依赖中的

<scope>provided</scope>
IDEA 错误:找不到或无法加载主类

这个问题同上,相关依赖类变成了 provided,
去掉这一行后,须进行 “invalidate” 操作

在这里插入图片描述

scala 相关类找不到
java.lang.ClassNotFoundException: scala.reflect.api.TypeCreator

如下图,
可以手动添加 reflect jar

在这里插入图片描述

jdk NoSuchMethodError
org.apache.spark.SparkException: Job aborted due to stage failure: Task serialization failed: java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;
java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;
	at org.apache.spark.util.io.ChunkedByteBufferOutputStream.toChunkedByteBuffer(ChunkedByteBufferOutputStream.scala:115)
	at org.apache.spark.broadcast.TorrentBroadcast$.blockifyObject(TorrentBroadcast.scala:325)
	at org.apache.spark.broadcast.TorrentBroadcast.writeBlocks(TorrentBroadcast.scala:140)
	at org.apache.spark.broadcast.TorrentBroadcast.<init>(TorrentBroadcast.scala:95)
Z                               boolean
B                               byte
C                               char
S                               short
I                               int
J                               long
F                               float
D                               double
L fully-qualified-class ;       fully-qualified-class
[ type                          type[] (数组)
( arg-types ) ret-type          method type

java.lang.NoSuchMethodError: net.Swedz.util.PlayerUtil.getMovementSpeed(Lorg/bukkit/entity/Player;)D

翻译过来签名是:

 double net.Swedz.util.PlayerUtil.getMovementSpeed(org.bukkit.entity.Player player);

可以参见 https://blog.csdn.net/jjlovefj/article/details/77868992

NoSuchMethodError这个问题是说相应的类中找不到该方法,通常这个问题有以下几种原因:

加载了错误版本的jar包
多个jar包中的类重复了,jvm加载了错误的类
终结符	类型
B	byte
C	char
D	double
F	float
I	int
Ljava/lang/Object;	java.lang.Object
J	long
S	short
V	void
Z	boolean
[	Array
Compiled from "Demo.java"
public class org.apache.Demo {
  public org.apache.Demo();
    Signature: ()V

  public org.apache.Demo(int);
    Signature: (I)V

  public static void main(java.lang.String[]);
    Signature: ([Ljava/lang/String;)V

  public static char method(float);
    Signature: (F)C

  public void method(boolean);
    Signature: (Z)V

  public void method(boolean, char, byte, short, int, long, float, double);
    Signature: (ZCBSIJFD)V

  public java.lang.String method(java.lang.Boolean, java.lang.Integer);
    Signature: (Ljava/lang/Boolean;Ljava/lang/Integer;)Ljava/lang/String;

  public void method(boolean[]) throws java.lang.Exception;
    Signature: ([Z)V

  public java.lang.String[] method(java.lang.String[][]);
    Signature: ([[Ljava/lang/String;)[Ljava/lang/String;
}
lambda 版本问题

java: -source 1.5 中不支持 lambda 表达式
(请使用 -source 8 或更高版本以启用 lambda 表达式)

在这里插入图片描述

class 类找不到
Error in query: Can not load class 'xxx.udf.IP2RegionSparkUDF' when registering the function 'default.IP2Region', please make sure it is on the classpath; line 1 pos 7s

两个环境下,一个jar 有问题,另一个没问题。
这种情况要排查 jar 也没有上传完整, 可以解压缩查找这个类,也可以对比两侧的md5值。

hadoop ls 文件
ls: Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error Visit https://iwiki.woa.com/pages/viewpage.action?pageId=1888348756

在联邦集群中,需要对正在活跃的master 节点进行查询

或者从 core-site.xml 去提取 fs.defaultFS 对应的域名进行查询。

SparkSession cannot resolve
object SparkSession is not a member of package org.apache.spark.sql

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_${scala.binary.version}</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
    </dependency>

需要增加的是 spark-sql 的依赖,
而不是 spark-core 的依赖,这需要记住

java.lang.ClassNotFoundException: xsbt.CompilerInterface

重新 maven clean, 并删除 .idea, 重新打开 Intellij

java: 程序包sun.misc不存在

在这里插入图片描述

在这里插入图片描述

在这里将 jdk 改成1.8即可解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值