Details
Description
PackageHelperImpl#getPackageNames would not be able to find and return
the package names if the package path or filename of the jar contains
plus signs due to the behavior of URLDecoder#decode.
URLDecoder#decode would decode the plus sign (i.e. +) as empty space, causing java.io.FileNotFoundException.
To reproduce the issue, include a plus sign in the groovyVersion in the gradle.properties, e.g. 5.0.0+SNAPSHOT, then run the PackageHelperImplTest, and testLoadAndGetPackagesEmpty would fail.
WARN [org.apache.groovy.groovysh.util.PackageHelperImpl] Error opening jar file : '/home/jus/repos/apache/groovy/build/libs/groovy-raw-5.0.0+SNAPSHOT.jar' : java.io.FileNotFoundException: /home/jus/repos/apache/groovy/build/libs/groovy-raw-5.0.0 SNAPSHOT.jar (No such file or directory)
...
Proposing the fix
Use Paths.get(url.toURI()).toFile() instead of new File(URLDecoder.decode(url.file, 'UTF-8')).
Github PR: https://github.com/apache/groovy/pull/1731
Attachments
Issue Links
- duplicates
-
GROOVY-10664 PackageHelperImpl#getPackageNames unable to find package from path or jars that contains plus sign
- Closed
- links to