7
7
import java .nio .file .Path ;
8
8
import java .util .HashMap ;
9
9
import java .util .HashSet ;
10
+ import java .util .List ;
10
11
import java .util .Map ;
11
12
import java .util .Optional ;
12
13
import java .util .Set ;
@@ -348,43 +349,36 @@ public boolean isSatisfiedBy(Task t) {
348
349
349
350
project .afterEvaluate (this ::afterEvaluate );
350
351
351
- tasks .named (JavaPlugin .COMPILE_JAVA_TASK_NAME , JavaCompile .class ,
352
- compileJava -> {
353
- compileJava .mustRunAfter (quarkusGenerateCode );
354
- compileJava .mustRunAfter (quarkusGenerateCodeDev );
355
- });
356
- tasks .named (JavaPlugin .COMPILE_TEST_JAVA_TASK_NAME , JavaCompile .class ,
357
- compileTestJava -> {
358
- compileTestJava .dependsOn (quarkusGenerateCode );
359
- compileTestJava .dependsOn (quarkusGenerateCodeTests );
360
- if (project .getGradle ().getStartParameter ().getTaskNames ().contains (QUARKUS_DEV_TASK_NAME )) {
361
- compileTestJava .getOptions ().setFailOnError (false );
362
- }
363
- });
364
-
365
352
TaskProvider <Task > classesTask = tasks .named (JavaPlugin .CLASSES_TASK_NAME );
366
353
TaskProvider <Task > resourcesTask = tasks .named (JavaPlugin .PROCESS_RESOURCES_TASK_NAME );
367
354
TaskProvider <Task > testClassesTask = tasks .named (JavaPlugin .TEST_CLASSES_TASK_NAME );
368
355
TaskProvider <Task > testResourcesTask = tasks .named (JavaPlugin .PROCESS_TEST_RESOURCES_TASK_NAME );
369
356
357
+ SourceSetContainer sourceSets = project .getExtensions ().getByType (SourceSetContainer .class );
358
+ SourceSet mainSourceSet = sourceSets .getByName (SourceSet .MAIN_SOURCE_SET_NAME );
359
+ SourceSet testSourceSet = sourceSets .getByName (SourceSet .TEST_SOURCE_SET_NAME );
360
+
370
361
quarkusGenerateCode .configure (task -> {
371
362
Configuration config = project .getConfigurations ().getByName (
372
363
ApplicationDeploymentClasspathBuilder .getBaseRuntimeConfigName (LaunchMode .NORMAL ));
373
364
task .dependsOn (resourcesTask , config );
374
365
task .setCompileClasspath (config );
366
+ task .setSourcesDirectories (getSourcesParents (mainSourceSet ));
375
367
});
376
368
quarkusGenerateCodeDev .configure (task -> {
377
369
Configuration config = project .getConfigurations ().getByName (
378
370
ApplicationDeploymentClasspathBuilder
379
371
.getBaseRuntimeConfigName (LaunchMode .DEVELOPMENT ));
380
372
task .dependsOn (resourcesTask , config );
381
373
task .setCompileClasspath (config );
374
+ task .setSourcesDirectories (getSourcesParents (mainSourceSet ));
382
375
});
383
376
quarkusGenerateCodeTests .configure (task -> {
384
377
Configuration config = project .getConfigurations ().getByName (
385
378
ApplicationDeploymentClasspathBuilder .getBaseRuntimeConfigName (LaunchMode .TEST ));
386
379
task .dependsOn (resourcesTask , config );
387
380
task .setCompileClasspath (config );
381
+ task .setSourcesDirectories (getSourcesParents (testSourceSet ));
388
382
});
389
383
390
384
quarkusDev .configure (task -> {
@@ -403,18 +397,6 @@ public boolean isSatisfiedBy(Task t) {
403
397
quarkusBuildCacheableAppParts .configure (
404
398
task -> task .dependsOn (classesTask , resourcesTask , tasks .named (JavaPlugin .JAR_TASK_NAME )));
405
399
406
- SourceSetContainer sourceSets = project .getExtensions ().getByType (SourceSetContainer .class );
407
-
408
- SourceSet mainSourceSet = sourceSets .getByName (SourceSet .MAIN_SOURCE_SET_NAME );
409
- SourceSet testSourceSet = sourceSets .getByName (SourceSet .TEST_SOURCE_SET_NAME );
410
-
411
- mainSourceSet .getJava ().srcDirs (quarkusGenerateCode , quarkusGenerateCodeDev );
412
- testSourceSet .getJava ().srcDirs (quarkusGenerateCodeTests );
413
-
414
- quarkusGenerateCode .configure (task -> task .setSourcesDirectories (getSourcesParents (mainSourceSet )));
415
- quarkusGenerateCodeDev .configure (task -> task .setSourcesDirectories (getSourcesParents (mainSourceSet )));
416
- quarkusGenerateCodeTests .configure (task -> task .setSourcesDirectories (getSourcesParents (testSourceSet )));
417
-
418
400
SourceSet intTestSourceSet = sourceSets .getByName (INTEGRATION_TEST_SOURCE_SET_NAME );
419
401
intTestSourceSet .setCompileClasspath (
420
402
intTestSourceSet .getCompileClasspath ()
@@ -487,32 +469,69 @@ public boolean isSatisfiedBy(Task t) {
487
469
// quarkusBuild is expected to run after the project has passed the tests
488
470
quarkusBuildCacheableAppParts .configure (task -> task .shouldRunAfter (tasks .withType (Test .class )));
489
471
490
- SourceSet generatedSourceSet = sourceSets .getByName (QuarkusGenerateCode .QUARKUS_GENERATED_SOURCES );
491
- SourceSet generatedTestSourceSet = sourceSets .getByName (QuarkusGenerateCode .QUARKUS_TEST_GENERATED_SOURCES );
492
-
493
- project .afterEvaluate (project1 -> {
494
- // Register the quarkus-generated-code
495
- for (String provider : quarkusExt .getCodeGenerationProviders ().get ()) {
496
-
497
- mainSourceSet .getJava ().srcDir (
498
- new File (generatedSourceSet .getJava ().getClassesDirectory ().get ().getAsFile (), provider ));
499
- testSourceSet .getJava ().srcDir (
500
- new File (generatedTestSourceSet .getJava ().getClassesDirectory ().get ().getAsFile (),
501
- provider ));
502
- }
503
- });
472
+ tasks .named (JavaPlugin .COMPILE_JAVA_TASK_NAME , JavaCompile .class ,
473
+ compileJava -> {
474
+ // quarkusGenerateCode is a dependency
475
+ compileJava .dependsOn (quarkusGenerateCode );
476
+ // quarkusGenerateCodeDev must run before compileJava in case quarkusDev is the target
477
+ compileJava .mustRunAfter (quarkusGenerateCodeDev );
478
+ // add the code gen sources
479
+ addCodeGenSourceDirs (compileJava ,
480
+ sourceSets .getByName (QuarkusGenerateCode .QUARKUS_GENERATED_SOURCES ), quarkusExt );
481
+ });
482
+ tasks .named (JavaPlugin .COMPILE_TEST_JAVA_TASK_NAME , JavaCompile .class ,
483
+ compileTestJava -> {
484
+ compileTestJava .dependsOn (quarkusGenerateCode );
485
+ compileTestJava .dependsOn (quarkusGenerateCodeTests );
486
+ if (project .getGradle ().getStartParameter ().getTaskNames ().contains (QUARKUS_DEV_TASK_NAME )) {
487
+ compileTestJava .getOptions ().setFailOnError (false );
488
+ }
489
+ // add the code gen test sources
490
+ addCodeGenSourceDirs (compileTestJava ,
491
+ sourceSets .getByName (QuarkusGenerateCode .QUARKUS_TEST_GENERATED_SOURCES ), quarkusExt );
492
+ });
504
493
});
505
494
506
495
project .getPlugins ().withId ("org.jetbrains.kotlin.jvm" , plugin -> {
507
496
quarkusDev .configure (task -> task .shouldPropagateJavaCompilerArgs (false ));
508
497
tasks .named ("compileKotlin" , task -> {
509
498
task .mustRunAfter (quarkusGenerateCode );
510
499
task .mustRunAfter (quarkusGenerateCodeDev );
500
+ addCodeGenSourceDirs (task , project .getExtensions ().getByType (SourceSetContainer .class )
501
+ .getByName (QuarkusGenerateCode .QUARKUS_GENERATED_SOURCES ), quarkusExt );
502
+ });
503
+ tasks .named ("compileTestKotlin" , task -> {
504
+ task .dependsOn (quarkusGenerateCodeTests );
505
+ addCodeGenSourceDirs (task , project .getExtensions ().getByType (SourceSetContainer .class )
506
+ .getByName (QuarkusGenerateCode .QUARKUS_TEST_GENERATED_SOURCES ), quarkusExt );
511
507
});
512
- tasks .named ("compileTestKotlin" , task -> task .dependsOn (quarkusGenerateCodeTests ));
513
508
});
514
509
}
515
510
511
+ private static void addCodeGenSourceDirs (JavaCompile compileJava , SourceSet generatedSourceSet ,
512
+ QuarkusPluginExtension quarkusExt ) {
513
+ final File baseDir = generatedSourceSet .getJava ().getClassesDirectory ().get ().getAsFile ();
514
+ for (String provider : quarkusExt .getCodeGenerationProviders ().get ()) {
515
+ compileJava .source (new File (baseDir , provider ));
516
+ }
517
+ }
518
+
519
+ private static void addCodeGenSourceDirs (Task compileKotlin , SourceSet generatedSourceSet ,
520
+ QuarkusPluginExtension quarkusExt ) {
521
+ final File baseDir = generatedSourceSet .getJava ().getClassesDirectory ().get ().getAsFile ();
522
+ final List <String > codeGenProviders = quarkusExt .getCodeGenerationProviders ().get ();
523
+ final Object [] codeGenDirs = new Object [codeGenProviders .size ()];
524
+ for (int i = 0 ; i < codeGenDirs .length ; ++i ) {
525
+ codeGenDirs [i ] = new File (baseDir , codeGenProviders .get (i ));
526
+ }
527
+ try {
528
+ var sourcesMethod = compileKotlin .getClass ().getMethod ("source" , Object [].class );
529
+ sourcesMethod .invoke (compileKotlin , new Object [] { codeGenDirs });
530
+ } catch (Exception e ) {
531
+ throw new RuntimeException (e );
532
+ }
533
+ }
534
+
516
535
private ApplicationDeploymentClasspathBuilder getDeploymentClasspathBuilder (Project project , LaunchMode mode ) {
517
536
return new ApplicationDeploymentClasspathBuilder (project , mode , taskDependencyFactory );
518
537
}
0 commit comments