< >的依赖关系< >的依赖< groupId >org.jvnet.hudson.plugins. groupid>< artifactId >javanet-uploader. ARTIFACTID> 1.5> < /版本<可选>真正的可选> < /依赖>依赖关系>
默认情况下,依赖项是必须的——如果任何依赖项不可用,那么插件将被禁用,不能使用。
然而,这只是默认值。可以将对其他插件的依赖声明为可选的。这样,即使一些可选的依赖项不可用,插件也会继续加载和执行。
要声明可选的依赖项,请添加<可选/ >
标记到插件中的已声明依赖项pom.xml.
。
< >的依赖关系< >的依赖< groupId >org.jvnet.hudson.plugins. groupid>< artifactId >javanet-uploader. ARTIFACTID> 1.5> < /版本<可选>真正的可选> < /依赖>依赖关系>
如果在插件a中使用不可用的可选依赖项中的任何类noclassdeffounderror
将抛出。处理这些错误仍然是您的责任(尽管Jenkins本身会进行一些处理)。必威国际有限公司如果您的特定扩展加载失败LinkageError.
由于缺少依赖项,它将正常禁用即可继续,然后继续执行实例化其他扩展。
通过更改,您可以将扩展标记为可选扩展名@延期
注释@Extension(可选= TRUE)
jenk必威国际有限公司ins在读取它时不会记录任何类加载错误。
@延期(可选=真正的)公共静止的班级YourDescriptor.延伸描述符 {@Override.公共细绳getDisplayName(){返回“yourdisplayname.“;}}
要确定是否安装了可选依赖项,可以使用Jenkins.getPlugin(String)方法。必威国际有限公司
如果(必威国际有限公司Jenkins.getInstance () .getPlugin (“javanet-uploader.“) ! =零){//在“Javanet-Uploader”插件中使用类}
地位 | getPlugin(“依赖”)!= null | getPlugin(“infficeee”).getWrapper()。isEnabled() | 从你的插件加载类 |
---|---|---|---|
未安装 |
错误的 |
NPE. |
失败 |
安装没有重启 |
真正的 |
真正的 |
成功 |
安装在插件前没有重新启动 |
真正的 |
真正的 |
成功 |
安装了 |
真正的 |
真正的 |
成功 |
卸载-没有重新启动 |
真正的 |
真正的 |
成功 |
Disabled -未重启 |
真正的 |
错误的 |
成功 |
禁用 |
错误的 |
NPE. |
失败 |
当您的插件可选地取决于另一个插件时,只有在安装了插件时,只需访问其他插件中的类。
在大多数情况下,您可以通过测试在执行访问可选地加载插件类的代码之前安装插件。
但是,有些情况下,您的课程会在类实例化或通过反射呼叫时加载其他类。例如,描述符#
呼叫#getmethod(“getdescriptor”)
并且经常会导致这些案件。
将加载公共方法声明中的类。
当实例化SomeClass或有人调用时,下列任何一个公共方法声明都会导致Derived被加载SomeClass#getmethod.
等等。如果未安装依赖插件,则会导致noclassdeffounderror
尽管dosomething1()
和dosomething2.
永远不会被执行。
公共班级SomeClass{//它们也导致即使没有执行而导致的加载。公共派生的dosomething1(){// 做点什么...}公共无效dosomething2(派生arg0){// 做点什么...}}
最好不要在方法声明中使用来自可选插件的类。
在某些情况下,甚至非公共(受保护或私有)方法声明也会导致类加载。
如果在基类上有CodeS upcasting,则将加载派生类。
以下代码原因导致派生加载时SomeClass
实例化,或者有人打电话SomeClass#getmethod.
等等。如果未安装依赖插件,则会导致noclassdeffounderror
尽管做点什么()
永远不会被执行。
公共班级SomeClass{公共无效dosomething(){派生的d = getdrived();基础B =(基础)D;//这导致即使没有执行也会导致加载。...}}
以下代码也导致加载衍生的
。
公共班级SomeClass{公共无效dosomething(){派生的d = getdrived();dosomethingimpl(d);//这导致即使没有执行也会导致加载。...}私人的无效dosomethingimpl(base b){// 做点什么}}