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[])这不会动态工作。例如,如果您需要为不同的类加载器在不同配置中使用同一类的不同版本,这将失败。