[ https://issues.apache.org/jira/browse/GROOVY-8295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16288014#comment-16288014 ]
Eric Milles edited comment on GROOVY-8295 at 12/12/17 6:41 PM: --------------------------------------------------------------- So here's what I am running into. We use the {{<ant antfile="ant/CompileAntScript.xml" ...}} from one build script to drive another. This results in a process working directory of {{ant/}}. This can be confirmed by executing {{java.nio.file.Paths.get("").toAbsolutePath()}} within Groovyc. When Groovyc is run in-process (no forking), it inherits this working directory. However, when Groovyc is forked, {{executor.setWorkingDirectory(getProject().getBaseDir());}} is called, which changes the working directory. If I replace {{executor.setWorkingDirectory(getProject().getBaseDir());}} with {{executor.setWorkingDirectory(Paths.get("").toAbsolutePath().toFile());}} in {{runForked}} and I replace {{String baseDir = getProject().getBaseDir().getAbsolutePath();}} with {{String baseDir = Paths.get("").toAbsolutePath().toString());}} in {{getClasspathRelative}} I get the same behavior for forked and in-process compilation (WRT working directory and relative paths). was (Author: emilles): So here's what I am running into. We use the {{<ant antfile="ant/CompileAntScript.xml" ...}} from one build script to drive another. This results in a process working directory of {{ant/}}. This can be confirmed by executing {{java.nio.file.Paths.get("").toAbsolutePath()}} within Groovyc. When Groovyc is run in-process (no forking), it inherits this working directory. However, when Groovyc is forked, {{executor.setWorkingDirectory(getProject().getBaseDir());}} is called, which changes the working directory. If I replace {{executor.setWorkingDirectory(getProject().getBaseDir());}} with {{{{executor.setWorkingDirectory(Paths.get("").toAbsolutePath().toFile());}} in {{runForked}} and I replace {{String baseDir = getProject().getBaseDir().getAbsolutePath();}} with {{String baseDir = Paths.get("").toAbsolutePath().toString());}} in {{getClasspathRelative}} I get the same behavior for forked and in-process compilation (WRT working directory and relative paths). > 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.14 > > 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)