Jenkins:按名称获取文件夹库
Jenkins: Get FOLDER Library by Name
在 /vars
中我有 AaConfig.groovy
.
的文件夹
在作业的 Groovy 脚本中我有:
#!groovy
@Library('globals') _
Class config = AaConfig
我可以使用 config
而不是 AaConfig
,在后续代码中没有问题。
This is useful because I can call different configuration files: AaConfig
, BbConfig
, etc. without changing anything because i'm calling them through config
所以现在我很贪心:-),想在外部指定配置文件:
#!groovy
@Library('globals') _
String configName = "AaConfig"
Class config = Class.forName(configName)
现在我得到:
java.lang.ClassNotFoundException: AaConfig
有什么解决办法吗?
如果您想通过反射加载 AaConfig
class,那么您必须使用与管道脚本相同的 classloader。 Class.forName()
在这种情况下使用 ClassLoaderForClassArtifacts
while Groovy CPS plugin uses CpsGroovyShell$CleanGroovyClassLoader
.
您可以在下方找到使用管道电流 classloader:
加载 class 的示例
String configName = 'AaConfig'
Class config = this.getClass().getClassLoader().loadClass(configName)
在 /vars
中我有 AaConfig.groovy
.
在作业的 Groovy 脚本中我有:
#!groovy
@Library('globals') _
Class config = AaConfig
我可以使用 config
而不是 AaConfig
,在后续代码中没有问题。
This is useful because I can call different configuration files:
AaConfig
,BbConfig
, etc. without changing anything because i'm calling them throughconfig
所以现在我很贪心:-),想在外部指定配置文件:
#!groovy
@Library('globals') _
String configName = "AaConfig"
Class config = Class.forName(configName)
现在我得到:
java.lang.ClassNotFoundException: AaConfig
有什么解决办法吗?
如果您想通过反射加载 AaConfig
class,那么您必须使用与管道脚本相同的 classloader。 Class.forName()
在这种情况下使用 ClassLoaderForClassArtifacts
while Groovy CPS plugin uses CpsGroovyShell$CleanGroovyClassLoader
.
您可以在下方找到使用管道电流 classloader:
加载 class 的示例String configName = 'AaConfig'
Class config = this.getClass().getClassLoader().loadClass(configName)