[ 
https://issues.apache.org/jira/browse/GROOVY-8805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16640606#comment-16640606
 ] 

ASF GitHub Bot commented on GROOVY-8805:
----------------------------------------

Github user asfgit closed the pull request at:

    https://github.com/apache/groovy/pull/799


> 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.4.15, 2.5.2
>            Reporter: Gary Clayburg
>            Priority: Major
>
> 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)

Reply via email to