@@ -71,18 +71,21 @@ public void apply(Project project) {
71
71
PluginContainer plugins = project .getPlugins ();
72
72
plugins .withType (JavaPlugin .class ).all ((javaPlugin ) -> {
73
73
plugins .withType (SpringBootPlugin .class ).all ((bootPlugin ) -> {
74
- SourceSet aotSourceSet = configureSourceSet (project , "aot" , SourceSet .MAIN_SOURCE_SET_NAME );
75
- registerProcessAotTask (project , aotSourceSet );
76
- SourceSet aotTestSourceSet = configureSourceSet (project , "aotTest" , SourceSet .TEST_SOURCE_SET_NAME );
77
- registerProcessTestAotTask (project , aotTestSourceSet );
74
+ JavaPluginExtension javaPluginExtension = project .getExtensions ().getByType (JavaPluginExtension .class );
75
+ SourceSetContainer sourceSets = javaPluginExtension .getSourceSets ();
76
+ SourceSet mainSourceSet = sourceSets .getByName (SourceSet .MAIN_SOURCE_SET_NAME );
77
+ SourceSet aotSourceSet = configureSourceSet (project , "aot" , mainSourceSet );
78
+ registerProcessAotTask (project , aotSourceSet , mainSourceSet );
79
+ SourceSet testSourceSet = sourceSets .getByName (SourceSet .TEST_SOURCE_SET_NAME );
80
+ SourceSet aotTestSourceSet = configureSourceSet (project , "aotTest" , testSourceSet );
81
+ registerProcessTestAotTask (project , aotTestSourceSet , testSourceSet );
78
82
});
79
83
});
80
84
}
81
85
82
- private SourceSet configureSourceSet (Project project , String newSourceSetName , String existingSourceSetName ) {
86
+ private SourceSet configureSourceSet (Project project , String newSourceSetName , SourceSet existingSourceSet ) {
83
87
JavaPluginExtension javaPluginExtension = project .getExtensions ().getByType (JavaPluginExtension .class );
84
88
SourceSetContainer sourceSets = javaPluginExtension .getSourceSets ();
85
- SourceSet existingSourceSet = sourceSets .getByName (existingSourceSetName );
86
89
return sourceSets .create (newSourceSetName , (sourceSet ) -> {
87
90
sourceSet .getJava ().setSrcDirs (List .of ("build/generated/" + newSourceSetName + "Sources" ));
88
91
sourceSet .getResources ().setSrcDirs (List .of ("build/generated/" + newSourceSetName + "Resources" ));
@@ -112,13 +115,13 @@ private void configureJavaRuntimeUsageAttribute(Project project, AttributeContai
112
115
attributes .attribute (Usage .USAGE_ATTRIBUTE , javaRuntime );
113
116
}
114
117
115
- private void registerProcessAotTask (Project project , SourceSet aotSourceSet ) {
118
+ private void registerProcessAotTask (Project project , SourceSet aotSourceSet , SourceSet mainSourceSet ) {
116
119
TaskProvider <ResolveMainClassName > resolveMainClassName = project .getTasks ()
117
120
.named (SpringBootPlugin .RESOLVE_MAIN_CLASS_NAME_TASK_NAME , ResolveMainClassName .class );
118
121
Provider <Directory > aotClasses = project .getLayout ().getBuildDirectory ().dir ("generated/aotClasses" );
119
122
TaskProvider <ProcessAot > processAot = project .getTasks ().register (PROCESS_AOT_TASK_NAME , ProcessAot .class ,
120
123
(task ) -> {
121
- configureAotTask (project , aotSourceSet , task , aotClasses );
124
+ configureAotTask (project , aotSourceSet , task , aotClasses , mainSourceSet );
122
125
task .getApplicationClass ()
123
126
.set (resolveMainClassName .flatMap (ResolveMainClassName ::readMainClassName ));
124
127
});
@@ -128,13 +131,14 @@ private void registerProcessAotTask(Project project, SourceSet aotSourceSet) {
128
131
}
129
132
130
133
private void configureAotTask (Project project , SourceSet sourceSet , AbstractAot task ,
131
- Provider <Directory > generatedClasses ) {
134
+ Provider <Directory > generatedClasses , SourceSet inputSourceSet ) {
132
135
task .setClasspath (sourceSet .getCompileClasspath ());
133
- task .getSourcesDir ().set (sourceSet .getJava ().getSrcDirs ().iterator ().next ());
134
- task .getResourcesDir ().set (sourceSet .getResources ().getSrcDirs ().iterator ().next ());
135
- task .getClassesDir ().set (generatedClasses );
136
+ task .getSourcesOutput ().set (sourceSet .getJava ().getSrcDirs ().iterator ().next ());
137
+ task .getResourcesOutput ().set (sourceSet .getResources ().getSrcDirs ().iterator ().next ());
138
+ task .getClassesOutput ().set (generatedClasses );
136
139
task .getGroupId ().set (project .provider (() -> String .valueOf (project .getGroup ())));
137
140
task .getArtifactId ().set (project .provider (() -> project .getName ()));
141
+ task .setInputClasses (inputSourceSet .getOutput ().getClassesDirs ());
138
142
}
139
143
140
144
private void configureDependsOn (Project project , SourceSet aotSourceSet ,
@@ -145,15 +149,13 @@ private void configureDependsOn(Project project, SourceSet aotSourceSet,
145
149
.configure ((processResources ) -> processResources .dependsOn (processAot ));
146
150
}
147
151
148
- private void registerProcessTestAotTask (Project project , SourceSet aotTestSourceSet ) {
149
- JavaPluginExtension javaPluginExtension = project .getExtensions ().getByType (JavaPluginExtension .class );
150
- SourceSetContainer sourceSets = javaPluginExtension .getSourceSets ();
151
- SourceSet testSourceSet = sourceSets .getByName (SourceSet .TEST_SOURCE_SET_NAME );
152
+ private void registerProcessTestAotTask (Project project , SourceSet aotTestSourceSet , SourceSet testSourceSet ) {
152
153
Provider <Directory > aotTestClasses = project .getLayout ().getBuildDirectory ().dir ("generated/aotTestClasses" );
153
154
TaskProvider <ProcessTestAot > processTestAot = project .getTasks ().register (PROCESS_TEST_AOT_TASK_NAME ,
154
155
ProcessTestAot .class , (task ) -> {
155
- configureAotTask (project , aotTestSourceSet , task , aotTestClasses );
156
- task .setTestSourceSet (testSourceSet );
156
+ configureAotTask (project , aotTestSourceSet , task , aotTestClasses , testSourceSet );
157
+ task .setTestRuntimeClasspath (
158
+ project .getConfigurations ().getByName (testSourceSet .getImplementationConfigurationName ()));
157
159
});
158
160
project .getDependencies ().add (aotTestSourceSet .getImplementationConfigurationName (),
159
161
project .files (aotTestClasses ));
0 commit comments