在groovsh中重写groovy附带的库?

在groovsh中重写groovy附带的库?,groovy,groovyshell,Groovy,Groovyshell,Groovy提供了各种第三方库。ServletAPI(v2.4)是groovy(v2.0.1)的一个示例: groovy:000>javax.servlet.http.HttpServlet.protectionDomain.codeSource =>(文件:/usr/lib/groovy/2.0.1/lib/servlet-api-2.4.jar) groovy:000> 假设我想要一个更新的版本:建议的方法是什么?我从groovy/lib/中删除了旧版本,并在/home/will/.gro

Groovy提供了各种第三方库。ServletAPI(v2.4)是groovy(v2.0.1)的一个示例:

groovy:000>javax.servlet.http.HttpServlet.protectionDomain.codeSource
=>(文件:/usr/lib/groovy/2.0.1/lib/servlet-api-2.4.jar)
groovy:000>

假设我想要一个更新的版本:建议的方法是什么?

我从
groovy/lib/
中删除了旧版本,并在
/home/will/.groovy/lib/
中添加了我想要的版本。我想您也可以直接添加到原始的lib dir中Jetty 9.1.x的嵌入式实例。经过大量的类加载扭曲后,唯一有效的方法是在命令行上使用
-cp
选项指定JAR:

groovysh -cp javax.servlet-api-3.1.0.jar
这将JAR的URL放在包含的ServletAPI前面,以便首先检查它。现在似乎没有别的办法了:

groovy:000> javax.servlet.http.HttpServlet.protectionDomain.codeSource
===> (file:/<current directory>/javax.servlet-api-3.1.0.jar <no signer certificates>)
groovy:000>javax.servlet.http.HttpServlet.protectionDomain.codeSource
===> (file://javax.servlet-api-3.1.0.jar )

我不得不说我讨厌这个答案。:)不幸的是,似乎没有直接的编程解决方案来“避开”这种罐子。哈哈哈!哦!它可能有更好的方法,我对groovy类路径知之甚少。您可以尝试打印它的类路径,看看是否可以得到一些东西:
println System.properties
已经在那里,完成了。既没有找到从类加载器中删除资源的方法,也没有找到一个“随时可用”的类加载器,该类加载器首先在本地查找(以避免由父cl解析资源)。
groovy:000> javax.servlet.http.HttpServlet.protectionDomain.codeSource
===> (file:/<current directory>/javax.servlet-api-3.1.0.jar <no signer certificates>)