Gary Clayburg created GROOVY-8805:
-------------------------------------
Summary: GroovyScriptEngine reload fails when dependent class is
deleted
Key: GROOVY-8805
URL: https://issues.apache.org/jira/browse/GROOVY-8805
Project: Groovy
Issue Type: Bug
Components: GroovyScriptEngine
Affects Versions: 2.5.2, 2.4.15
Reporter: Gary Clayburg
When using GroovyScriptEngine.loadScriptByName(scriptName), the reloading will
fail with a groovy.util.ResourceException if a dependent class has been removed
from the script root filesystem. To reproduce this issue, start with a script
and a dependent class:
ClassA.groovy
{code:java}
DependentClass ic = new DependentClass(){code}
DependentClass.groovy
{code:java}
class DependentClass {}
{code}
When these classes are initially compiled with GroovyScriptEngine, things work
fine. There are no errors when loading the script like this:
{code:java}
gse.loadScriptByName('ClassA.groovy'){code}
However, once DependentClass.groovy is completely removed from the filesystem
and ClassA is modified to remove the reference, the same
gse.loadScriptByName('ClassA.groovy') will fail with a
groovy.utilResourceExeption.
It appears GroovyScriptEngine keeps a dependency cache and gets confused in
this case. The line that fails is a check for lastModifedTime of this
dependency. The dependency of course no longer exists, but the check for
lastModiedTime occurs before ClassA compile has been attempted.
I am working on a PR that fixes this. It seems to me that inside
gse.isSourceNewer(entry), it can just treat a ResourceException during
getLastModifed(scriptName) as an indication to just attempt a recompile instead
of throwing the exception.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)