关于idea开发jenkins插件之第三方依赖包(运行时)加载的坑

jenkins插件运行时如何加载插件及插件的第三方依赖(类加载器)

坑的周围环境

1,软硬件:win10系统,idea2022.1,jdk11,vm虚拟机centos7中docker启动Jenkins 2.401,maven3.6.3;
2,需求;使用idea开发jenkins插件,该插件需要引入自定义的jar包;

问题描述

	正常开发好jenkins插件之后,安装、重启jenkins,插件正常运行,在需要插件的自定义jar包中一个函数去处理一些文件时,该自定义jar包在加载自己内部类时无法加载出,找不到自己内部类;导致处理一些文件时无效处理;

场景重现

在这里插入图片描述

问题原因分析

jenkins是如何加载插件中的类的?
Jenkins 是一个基于 Java 开发的持续集成和持续交付工具,它通过插件的方式扩展其功能。Jenkins 插件包含了许多 Java 类,当 Jenkins 加载插件时,需要通过类加载器将这些类加载到内存中。以下是 Jenkins 加载插件中类的过程:
1,Jenkins 启动时,会创建一个根类加载器(ClassLoader),用于加载 Jenkins 核心代码和系统类库。
2,当 Jenkins 加载插件时,它会创建一个独立的类加载器来加载该插件的所有类。这个类加载器是从根类加载器继承而来,它会首先尝试从本地文件系统加载插件的 jar 文件,如果 jar 文件不存在,则会尝试从网络下载该插件。
3,一旦插件的 jar 文件被加载到内存中,Jenkins 会使用插件类加载器来加载插件中的类。插件类加载器会将插件 jar 文件中的所有类加载到内存中,并将这些类放置在插件类加载器的命名空间中。
4,当插件中的类被引用时,Jenkins 会通过插件类加载器来查找这些类。如果插件类加载器无法找到这些类,则会尝试使用根类加载器来加载它们。
5,如果插件中的类引用了其他插件中的类,那么插件类加载器会使用同样的方式来加载这些依赖的类。
总之,Jenkins 通过使用独立的插件类加载器来加载插件中的所有类,从而实现了插件之间的隔离和互相独立。这种类加载器的机制可以确保每个插件都有自己的类加载器,并且它们之间的类不会发生冲突。
Jenkins 核心类加载器与插件类加载器有何不同?
Jenkins 核心类加载器和插件类加载器是两种不同类型的类加载器,它们的作用和加载的类也有所不同。
1.核心类加载器(Core ClassLoader):Jenkins 核心类加载器是启动 Jenkins 时创建的类加载器。它负责加载 Jenkins 核心代码和系统类库,如 Java 标准类库等。核心类加载器的父加载器是 JVM 的 Bootstrap 类加载器。
2.插件类加载器(Plugin ClassLoader):每个插件都有自己的插件类加载器,用于加

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值