From 15fcc941e01cb127bd2b137d88ed702dea6afa46 Mon Sep 17 00:00:00 2001 From: sergiys Date: Thu, 13 Jun 2019 17:08:01 -0700 Subject: [PATCH] Use commandline argument file for all options, but -J, for case javac.forked=true --- .../ant/taskdefs/compilers/JavacExternal.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java b/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java index 65f41b7b6..7c8354558 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java @@ -60,9 +60,27 @@ public class JavacExternal extends DefaultCompilerAdapter { return execOnVMS(cmd, firstFileName); } return - executeExternalCompile(cmd.getCommandline(), firstFileName, + executeExternalCompile(cmd.getCommandline(), + assumeJava11() ? -1 : firstNonJOption(cmd), true) - == 0; + == 0; + } + + /** + * Finds first non -J argument, so that all, but -J options are written to file + * As per javac documentation: + * you can specify one or more files that contain arguments to the javac command (except -J options) + * @param cmd Commandline + * @return int + */ + private int firstNonJOption(Commandline cmd) { + String[] commandline = cmd.getCommandline(); + int i = 1; // 0 is for javac executable + while(i < commandline.length && commandline[i].startsWith("-J")) { + i++; + } + + return i; } /**