如何让用户改变其使用在摇篮插件库的版本?(How to allow user to change t

2019-10-19 15:32发布

在我的插件,我称之为静态引导方法MutationCoverageReport.main(arg)由这是我的一个插件的依赖编译库。 我想,以允许插件用户改变库的版本应该使用(假定所选择的版本具有兼容API)。

我会建议使用排除从我的插件传递依赖和手动添加依赖到库中所要求的版本buildscript.dependencies.classpath在他的build.gradle,但是这是不是很优雅:

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)使用新的类加载器的反射调用。

也许还有一个更简单修改通过插件类路径与所提到的方法将被调用的方法?

主要的问题 。 什么是允许插件用户定义的插件执行库的版本最好的方法是什么?

Answer 1:

我不知道这是你在找什么,但这里的Jacoco插件如何允许用户配置所使用的库。

JacocoPluginExtension

class JacocoPluginExtension {
    // ...
    String toolVersion = '0.32.0'
    // ...
}

JacocoPlugin

class JacocoPlugin implements Plugin<Project> {
    // ...
    config.dependencies.add(this.project.dependencies.create("org.jacoco:org.jacoco.ant:${extension.toolVersion}"))
    // ...
}


Answer 2:

在另一个问题有关使用一个单独的类路径执行Java类彼得Niederwieser提供3种方法。 最终修改我的任务延长JavaExec 。 我集显组执行类路径是从插件运行的类路径分开,并且可以包含不同的库版本。

其缺点是只允许运行的主要方法,但它不是我的情况的问题。



文章来源: How to allow user to change the version of the library which is used by a plugin in Gradle?