Class 如何从gradle中的自定义配置创建类加载器?

Class 如何从gradle中的自定义配置创建类加载器?,class,configuration,gradle,dependencies,classloader,Class,Configuration,Gradle,Dependencies,Classloader,我已经定义了自定义配置和依赖项 repositories { mavenCentral() } configurations { myConfig } dependencies { myConfig 'org.foo:foo:+' } 如何创建类加载器来动态加载类 task myTask { def classLoader = configurations.myConfig.???? def foo = Class.forName( "org.foo

我已经定义了自定义配置和依赖项

repositories {
    mavenCentral()
}
configurations {
    myConfig
}
dependencies {
    myConfig   'org.foo:foo:+'
}
如何创建类加载器来动态加载类

task myTask {
    def classLoader = configurations.myConfig.????
    def foo = Class.forName( "org.foo.Foo", true, classLoader ).newInstance();
}

我现在找到了这个解决方案。我希望有更好的解决办法

def classLoader = getClassLoader( configurations.myConfig )

ClassLoader getClassLoader( Configuration config ) {
    ArrayList urls = new ArrayList()
    config.files.each { File file ->
        urls += file.toURI().toURL()
    }
    return new URLClassLoader( urls.toArray(new URL[0]) );
}

将配置移动到
构建脚本{dependentials{classpath'deps:go:here'}
。然后这些类都会自动/正确地添加到gradle类路径中(这样您就可以引用其中的类型)

这是向类路径添加类的“官方”方式。创建任意对象请注意,您只能在gradle脚本的最顶端配置buildscript{}


如果它是gradle构建中所有项目的依赖项,您可以创建一个
buildSrc/build.gradle
,您只需将依赖项添加到运行时/实现/编译类路径:
dependencies{implementation'deps:go:here'}

您试图在这里实现什么?是否要将类动态加载到Gradle构建脚本中?为什么?您不能只使用常规的
buildscript
块来配置构建脚本的类路径吗?@Jolta这些类仅用于一些可选任务。对于默认构建,必须100%确保没有依赖项。虽然这是URLClassLoader的用途,但您可能希望直接向buildscript类路径添加依赖项。见下面我的答案。此外,如果您希望父加载类型由由外部类加载器创建的对象共享,则应该明确考虑添加父类加载器。因为我们还想检查在列表中没有缺失的依赖项,父类加载器是一个坏主意。GooVyTys:<代码>新URLCaseLoad(COMFIG.Mult*.TURIL())*TURLL()作为URL[])这不会动态工作。例如,如果您需要为不同的类加载器在不同配置中使用同一类的不同版本,这将失败。