77import org .codehaus .groovy .runtime .DefaultGroovyMethods ;
88import org .gradle .api .DefaultTask ;
99import org .gradle .api .Transformer ;
10- import org .gradle .api .file .*;
10+ import org .gradle .api .file .ConfigurableFileCollection ;
11+ import org .gradle .api .file .DirectoryProperty ;
12+ import org .gradle .api .file .FileSystemLocation ;
13+ import org .gradle .api .file .FileSystemLocationProperty ;
14+ import org .gradle .api .file .RegularFileProperty ;
1115import org .gradle .api .logging .LogLevel ;
1216import org .gradle .api .logging .LoggingManager ;
1317import org .gradle .api .model .ObjectFactory ;
1620import org .gradle .api .provider .Property ;
1721import org .gradle .api .provider .Provider ;
1822import org .gradle .api .provider .ProviderFactory ;
19- import org .gradle .api .tasks .* ;
23+ import org .gradle .api .tasks .Classpath ;
2024import org .gradle .api .tasks .Console ;
25+ import org .gradle .api .tasks .Input ;
26+ import org .gradle .api .tasks .InputFiles ;
27+ import org .gradle .api .tasks .Internal ;
28+ import org .gradle .api .tasks .JavaExec ;
29+ import org .gradle .api .tasks .Nested ;
30+ import org .gradle .api .tasks .Optional ;
31+ import org .gradle .api .tasks .OutputFile ;
32+ import org .gradle .api .tasks .TaskAction ;
2133import org .gradle .jvm .toolchain .JavaLanguageVersion ;
2234import org .gradle .jvm .toolchain .JavaLauncher ;
2335import org .gradle .jvm .toolchain .JavaToolchainService ;
24- import org .gradle .jvm .toolchain .JavaToolchainSpec ;
2536import org .gradle .process .ExecOperations ;
2637import org .gradle .process .ExecResult ;
2738import org .jetbrains .annotations .MustBeInvokedByOverriders ;
2839import org .jetbrains .annotations .Nullable ;
2940import org .jetbrains .annotations .UnknownNullability ;
3041
3142import javax .inject .Inject ;
32- import java .io .*;
43+ import java .io .File ;
44+ import java .io .FileWriter ;
45+ import java .io .IOException ;
46+ import java .io .PrintWriter ;
3347import java .util .ArrayList ;
3448import java .util .HashMap ;
3549import java .util .List ;
@@ -84,7 +98,7 @@ public abstract class ToolExecBase<P extends EnhancedProblems> extends DefaultTa
8498
8599 protected abstract @ Console Property <LogLevel > getStandardErrorLogLevel ();
86100
87- protected abstract @ OutputFile RegularFileProperty getLogFile ();
101+ protected abstract @ Internal RegularFileProperty getLogFile ();
88102 //endregion
89103
90104 protected abstract @ Inject ObjectFactory getObjects ();
@@ -152,6 +166,8 @@ protected void addArguments() { }
152166 /// [#addArguments()] never being run.
153167 @ TaskAction
154168 protected ExecResult exec () throws IOException {
169+ var logger = getLogger ();
170+
155171 this .args = new ArrayList <>();
156172 this .jvmArgs = new ArrayList <>();
157173 this .environment = new HashMap <>();
@@ -162,7 +178,6 @@ protected ExecResult exec() throws IOException {
162178
163179 var args = DefaultGroovyMethods .collect (this .args , Closures .<Provider <String >, String >function (Provider ::get ));
164180 var jvmArgs = DefaultGroovyMethods .collect (this .jvmArgs , Closures .<Provider <String >, String >function (Provider ::get ));
165- this .getLogger ().info ("{} {}" , this .getClasspath ().getAsPath (), String .join (" " , args ));
166181
167182 var stdOutLevel = this .getStandardOutputLogLevel ().get ();
168183 var stdErrLevel = this .getStandardErrorLogLevel ().get ();
@@ -178,15 +193,13 @@ protected ExecResult exec() throws IOException {
178193 javaLauncher = getJavaLauncher ().get ();
179194 }
180195
181- final File workingDirectory = this .getWorkingDir ().get ().getAsFile ();
182- if (!workingDirectory .exists ())
183- workingDirectory .mkdirs ();
196+ var workingDirectory = this .getWorkingDir ().map (problems .ensureFileLocation ()).get ().getAsFile ();
184197
185- try (PrintWriter log = new PrintWriter (new FileWriter (this .getLogFile ().get ().getAsFile ()), true )) {
186- return this . getExecOperations ().javaexec (spec -> {
198+ try (var log = new PrintWriter (new FileWriter (this .getLogFile ().getAsFile ().get ()), true )) {
199+ return getExecOperations ().javaexec (spec -> {
187200 spec .setIgnoreExitValue (true );
188201
189- spec .setWorkingDir (this . getWorkingDir () );
202+ spec .setWorkingDir (workingDirectory );
190203 spec .setClasspath (this .getClasspath ());
191204 spec .getMainClass ().set (this .getMainClass ());
192205 spec .setExecutable (javaLauncher .getExecutablePath ().getAsFile ().getAbsolutePath ());
@@ -197,24 +210,25 @@ protected ExecResult exec() throws IOException {
197210
198211 spec .setStandardOutput (SharedUtil .toLog (
199212 line -> {
200- this . getLogger () .log (stdOutLevel , line );
213+ logger .log (stdOutLevel , line );
201214 log .println (line );
202215 }
203216 ));
204217 spec .setErrorOutput (SharedUtil .toLog (
205218 line -> {
206- this . getLogger () .log (stdErrLevel , line );
219+ logger .log (stdErrLevel , line );
207220 log .println (line );
208221 }
209222 ));
210223
211224 log .println ("Java Launcher: " + spec .getExecutable ());
212- log .println ("Working directory: " + workingDirectory .getAbsolutePath ());
213- log .println ("Main class: " + this .getMainClass ().get ());
214- log .println ("Arguments: " + args . stream (). collect ( Collectors . joining ( ", " , "'" , "'" )) );
215- log .println ("JVM Arguments: " + jvmArgs . stream (). collect ( Collectors . joining ( ", " , "'" , "'" )) );
225+ log .println ("Working directory: " + spec . getWorkingDir () .getAbsolutePath ());
226+ log .println ("Main class: " + spec .getMainClass ().get ());
227+ log .println ("Arguments: ' " + String . join ( ", " , spec . getArgs ()) + '\'' );
228+ log .println ("JVM Arguments: ' " + String . join ( ", " , spec . getAllJvmArgs ()) + '\'' );
216229 log .println ("Classpath:" );
217- getClasspath ().forEach (f -> log .println (" - " + f .getAbsolutePath ()));
230+ for (var f : getClasspath ())
231+ log .println (" - " + f .getAbsolutePath ());
218232 log .println ("====================================" );
219233 });
220234 }
0 commit comments