在我的插件中,我从一个库中调用静态引导方法MutationCoverageReport.main(arg)
,该库是我的插件的编译依赖项。我想允许插件用户更改应该使用的库版本(假设所选版本具有兼容的 API)。
我可以建议用户从我的插件中排除传递依赖,并在他的 build.gradle 中手动将请求版本中的库添加到 buildscript.dependencies.classpath,但这不是很优雅:
buildscript {
(...)
dependencies {
classpath('info.solidsoft.gradle.pitest:gradle-pitest-plugin:0.32.0') {
exclude(group: 'org.pitest')
}
classpath 'org.pitest:pitest-command-line:0.33'
}
}
我希望能够在我的配置闭包中使用 libVersion 参数,但是我尝试过的两个解决方案存在一些问题。
1.
我可能需要从我的插件(原始库版本及其依赖项)中删除传递依赖项,并在请求的版本(来自配置闭包)中添加一个库作为 buildscript 依赖项。
在 afterEvaluate 中为时已晚(配置已解决),我在成功连接 beforeEvaluate 时遇到了问题(是否为单个模块项目触发?)。
2.
我可以更改用于从库中执行静态方法的类路径。
为此,我可以创建一个自定义类加载器,它会在委托给父类加载器之前使用我的库类(在请求的版本中)。我还必须MutationCoverageReport.main(arg)
使用新的类加载器用反射调用替换一个衬里。
也许有一种更简单的方法可以通过调用上述方法的插件来修改类路径?
主要问题。允许插件用户定义插件执行的库版本的最佳方法是什么?