You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2017/12/04 19:41:00 UTC
[jira] [Comment Edited] (GROOVY-8295) Groovyc ant task can overflow
Windows command line if classpath is large
[ https://issues.apache.org/jira/browse/GROOVY-8295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16277351#comment-16277351 ]
Eric Milles edited comment on GROOVY-8295 at 12/4/17 7:40 PM:
--------------------------------------------------------------
Here is a possible new version of {{getClasspathRelative}}:
{code}
private String getClasspathRelative(Path classpath) {
String baseDir = getProject().getBaseDir().getAbsolutePath();
String classpathString = classpath.toString();
// replace each occurrence of baseDir after a pathSeparator with "."
classpathString = classpathString.replaceAll("(\\A|" + File.pathSeparator + ")" + Pattern.quote(baseDir) + "\\b", "$1.");
return classpathString;
}
{code}
was (Author: emilles):
Here is a possible new version of {{getClasspathRelative}}:
{code}
private String getClasspathRelative(Path classpath) {
String baseDir = getProject().getBaseDir().getAbsolutePath();
String raw = classpath.toString();
// replace each occurrence of baseDir after a pathSeparator with "."
raw = raw.replaceAll("(\\A|" + File.pathSeparator + ")" + Pattern.quote(baseDir) + "\\b", "$1.");
return raw;
}
{code}
> Groovyc ant task can overflow Windows command line if classpath is large
> ------------------------------------------------------------------------
>
> Key: GROOVY-8295
> URL: https://issues.apache.org/jira/browse/GROOVY-8295
> Project: Groovy
> Issue Type: Bug
> Components: Ant integration
> Environment: Windows
> Reporter: Eric Milles
> Assignee: Paul King
> Fix For: 2.4.13
>
> Attachments: Groovyc.patch
>
>
> The groovyc ant adapter tries to account for the 32K command line length limit on windows in its addSourceFiles method. However, if the command line gets long for other reasons -- we include a number of libraries in our compiled projects -- the command line can still be overflown.
> This results in:
> {code}
> CompileAntScript.xml:129: Error running forked groovyc.
> at org.codehaus.groovy.ant.Groovyc.runForked(Groovyc.java:1121)
> at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:1214)
> at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:831)
> Caused by: java.io.IOException: Cannot run program "C:\Program Files\Java\jdk1.8.0_60\jre\bin\java": CreateProcess error=206, The filename or extension is too long
> at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
> at java.lang.Runtime.exec(Runtime.java:620)
> at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:862)
> at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:481)
> at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:495)
> at org.codehaus.groovy.ant.Groovyc.runForked(Groovyc.java:1119)
> ... 31 more
> Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long
> at java.lang.ProcessImpl.create(Native Method)
> at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
> at java.lang.ProcessImpl.start(ProcessImpl.java:137)
> at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
> ... 36 more
> {code}
> Would it be possible to add command line length checking to {{runForked}} instead of {{addSourceFiles}} and use a command file for groovyc to prevent command line overflow? Without this, we are having to use a lot of verbose workarounds in Ant.
> https://github.com/apache/groovy/blob/master/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)