首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy GroovyClassLoader JVM缓存和更新加载的类

Groovy GroovyClassLoader JVM缓存和更新加载的类
EN

Stack Overflow用户
提问于 2016-02-04 03:50:13
回答 1查看 1.1K关注 0票数 0

我正在用GroovyClassLoader测试JARS的动态加载。我们将经常更新JAR,因此在不重新启动JVM的情况下进行更改时,我们需要重新加载JAR(更具体地说,是类)。这个是可能的吗?

我做了一次classLoader.addUrl(path),然后将JAR加载到内存中。然后,我可以在后续脚本中生成实例,而无需再次加载类(这看起来像是缓存,这很好)。

问题是我尝试过做classLoader.clearCache(),但它似乎没有产生任何效果。.classCache.sourceCache是空的。但是,我仍然可以生成实例。我尝试获取父类加载器,但它没有显示加载的包/类的任何跟踪。我不知道它住在哪里。

我还读过这篇文章,没有在JVM中编译该类。

Classes Loaded by GroovyClassLoader not listed

我不认为我的代码是相关的,但这里无论如何。

代码语言:javascript
复制
GroovyClassLoader classLoader = new GroovyClassLoader()
def jarFile = new File("C:/sandbox-test-0.1.0-SNAPSHOT.jar")
classLoader.addURL(jarFile.toURI().toURL())
def mySand = Class.forName("com.test.Sandbox").newInstance()
println mySand.dump()
EN

回答 1

Stack Overflow用户

发布于 2016-02-17 16:44:07

Sascha给我展示了一个非常简单的解决方案。

要“更新”类加载器,可以简单地取消现有的类加载器并重做:

代码语言:javascript
复制
classloader = null
classloader = new GroovyClassLoader()
classLoader.addURL(jarFile.toURI().toURL())

只有在请求类时才需要类加载器。

这在我的用例中很简单。也许其他人会有更复杂的情况,这可能会使这不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35192157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档