Skip to content

Commit eb6d274

Browse files
committed
wip
1 parent f346fe6 commit eb6d274

File tree

14 files changed

+890
-162
lines changed

14 files changed

+890
-162
lines changed

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/QuarkusPlugin.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.gradle.api.artifacts.ExternalModuleDependency;
2828
import org.gradle.api.artifacts.ProjectDependency;
2929
import org.gradle.api.file.FileCollection;
30+
import org.gradle.api.internal.tasks.TaskDependencyFactory;
3031
import org.gradle.api.plugins.BasePlugin;
3132
import org.gradle.api.plugins.JavaPlugin;
3233
import org.gradle.api.provider.Property;
@@ -130,11 +131,13 @@ public class QuarkusPlugin implements Plugin<Project> {
130131
public static final String IMAGE_CHECK_REQUIREMENTS_NAME = "quarkusImageExtensionChecks";
131132

132133
private final ToolingModelBuilderRegistry registry;
134+
private final TaskDependencyFactory taskDependencyFactory;
133135

134136
@SuppressWarnings("CdiInjectionPointsInspection")
135137
@Inject
136-
public QuarkusPlugin(ToolingModelBuilderRegistry registry) {
138+
public QuarkusPlugin(ToolingModelBuilderRegistry registry, TaskDependencyFactory taskDepFactory) {
137139
this.registry = registry;
140+
this.taskDependencyFactory = taskDepFactory;
138141
}
139142

140143
@Override
@@ -183,12 +186,9 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
183186
});
184187

185188
Provider<DefaultProjectDescriptor> projectDescriptor = ProjectDescriptorBuilder.buildForApp(project);
186-
ApplicationDeploymentClasspathBuilder normalClasspath = new ApplicationDeploymentClasspathBuilder(project,
187-
LaunchMode.NORMAL);
188-
ApplicationDeploymentClasspathBuilder testClasspath = new ApplicationDeploymentClasspathBuilder(project,
189-
LaunchMode.TEST);
190-
ApplicationDeploymentClasspathBuilder devClasspath = new ApplicationDeploymentClasspathBuilder(project,
191-
LaunchMode.DEVELOPMENT);
189+
ApplicationDeploymentClasspathBuilder normalClasspath = getDeploymentClasspathBuilder(project, LaunchMode.NORMAL);
190+
ApplicationDeploymentClasspathBuilder testClasspath = getDeploymentClasspathBuilder(project, LaunchMode.TEST);
191+
ApplicationDeploymentClasspathBuilder devClasspath = getDeploymentClasspathBuilder(project, LaunchMode.DEVELOPMENT);
192192

193193
TaskProvider<QuarkusApplicationModelTask> quarkusGenerateTestAppModelTask = tasks.register(
194194
"quarkusGenerateTestAppModel",
@@ -201,7 +201,6 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
201201
configureApplicationModelTask(project, task, projectDescriptor, devClasspath, LaunchMode.DEVELOPMENT,
202202
"quarkus/application-model/quarkus-app-dev-model.dat");
203203
});
204-
205204
TaskProvider<QuarkusApplicationModelTask> quarkusGenerateAppModelTask = tasks.register("quarkusGenerateAppModel",
206205
QuarkusApplicationModelTask.class, task -> {
207206
configureApplicationModelTask(project, task, projectDescriptor
@@ -509,6 +508,10 @@ public boolean isSatisfiedBy(Task t) {
509508
});
510509
}
511510

511+
private ApplicationDeploymentClasspathBuilder getDeploymentClasspathBuilder(Project project, LaunchMode mode) {
512+
return new ApplicationDeploymentClasspathBuilder(project, mode, taskDependencyFactory);
513+
}
514+
512515
private static void configureApplicationModelTask(Project project, QuarkusApplicationModelTask task,
513516
Provider<DefaultProjectDescriptor> projectDescriptor,
514517
ApplicationDeploymentClasspathBuilder classpath,
@@ -517,9 +520,10 @@ private static void configureApplicationModelTask(Project project, QuarkusApplic
517520
task.getLaunchMode().set(launchMode);
518521
task.getTypeModel().set(task.getPath());
519522
task.getOriginalClasspath().setFrom(classpath.getOriginalRuntimeClasspathAsInput());
520-
task.getAppClasspath().configureFrom(classpath.getRuntimeConfigurationWithoutResolvingDeployment());
521-
task.getPlatformConfiguration().configureFrom(classpath.getPlatformConfiguration());
522-
task.getDeploymentClasspath().configureFrom(classpath.getDeploymentConfiguration());
523+
task.getAppClasspath().configureFrom(classpath.getRuntimeConfigurationWithoutResolvingDeployment(), launchMode,
524+
project.getName());
525+
task.getPlatformConfiguration().configureFrom(classpath.getPlatformConfiguration(), launchMode, project.getName());
526+
task.getDeploymentClasspath().configureFrom(classpath.getDeploymentConfiguration(), launchMode, project.getName());
523527
task.getDeploymentResolvedWorkaround().from(classpath.getDeploymentConfiguration().getIncoming().getFiles());
524528
task.getPlatformImports().set(classpath.getPlatformImportsWithoutResolvingPlatform());
525529
task.getApplicationModel().set(project.getLayout().getBuildDirectory().file(quarkusModelFile));
@@ -576,11 +580,6 @@ private void createConfigurations(Project project) {
576580
.extendsFrom(configContainer.findByName(JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME));
577581

578582
ApplicationDeploymentClasspathBuilder.initConfigurations(project);
579-
580-
// Also initialize the configurations that are specific to a LaunchMode
581-
for (LaunchMode launchMode : LaunchMode.values()) {
582-
new ApplicationDeploymentClasspathBuilder(project, launchMode);
583-
}
584583
}
585584

586585
private Set<Path> getSourcesParents(SourceSet mainSourceSet) {
@@ -744,4 +743,4 @@ private static Map<String, Object> extractQuarkusTestSystemProperties() {
744743
}
745744
return quarkusSystemProperties;
746745
}
747-
}
746+
}

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusApplicationModelTask.java

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
import io.quarkus.bootstrap.workspace.SourceDir;
7272
import io.quarkus.bootstrap.workspace.WorkspaceModule;
7373
import io.quarkus.fs.util.ZipUtils;
74+
import io.quarkus.gradle.dependency.ConditionalDependencyResolver;
75+
import io.quarkus.gradle.dependency.DeploymentConfigurationResolver;
7476
import io.quarkus.gradle.tooling.ToolingUtils;
7577
import io.quarkus.gradle.workspace.descriptors.DefaultProjectDescriptor;
7678
import io.quarkus.gradle.workspace.descriptors.ProjectDescriptor.TaskType;
@@ -82,7 +84,6 @@
8284
import io.quarkus.maven.dependency.GACTV;
8385
import io.quarkus.maven.dependency.GAV;
8486
import io.quarkus.maven.dependency.ResolvedDependencyBuilder;
85-
import io.quarkus.paths.PathCollection;
8687
import io.quarkus.paths.PathList;
8788
import io.quarkus.runtime.LaunchMode;
8889
import io.quarkus.runtime.util.HashUtil;
@@ -149,19 +150,29 @@ public QuarkusApplicationModelTask() {
149150
private void collectPlatforms(ResolvedDependencyResult resolvedDependency,
150151
Map<ComponentIdentifier, List<QuarkusResolvedArtifact>> artifactsByCapability,
151152
PlatformImportsImpl platformImports) {
152-
List<QuarkusResolvedArtifact> artifacts = findArtifacts(resolvedDependency, artifactsByCapability);
153-
ModuleVersionIdentifier moduleVersionIdentifier = resolvedDependency.getSelected().getModuleVersion();
154-
for (QuarkusResolvedArtifact artifact : artifacts) {
155-
if (artifact != null && artifact.file.getName().endsWith(".properties")) {
156-
try {
157-
platformImports.addPlatformProperties(moduleVersionIdentifier.getGroup(), moduleVersionIdentifier.getName(),
158-
null, "properties", moduleVersionIdentifier.getVersion(), artifact.file.toPath());
159-
} catch (AppModelResolverException e) {
160-
throw new GradleException("Failed to import platform properties " + artifact.file, e);
153+
final ModuleVersionIdentifier moduleVersionIdentifier = resolvedDependency.getSelected().getModuleVersion();
154+
if (moduleVersionIdentifier == null) {
155+
return;
156+
}
157+
final String moduleName = moduleVersionIdentifier.getName();
158+
if (moduleName.endsWith(BootstrapConstants.PLATFORM_DESCRIPTOR_ARTIFACT_ID_SUFFIX)) {
159+
for (QuarkusResolvedArtifact artifact : findArtifacts(resolvedDependency, artifactsByCapability)) {
160+
if (artifact != null && artifact.file.getName().endsWith(".json")) {
161+
platformImports.addPlatformDescriptor(moduleVersionIdentifier.getGroup(), moduleVersionIdentifier.getName(),
162+
moduleVersionIdentifier.getVersion(), "json", moduleVersionIdentifier.getVersion());
163+
}
164+
}
165+
} else if (moduleName.endsWith(BootstrapConstants.PLATFORM_PROPERTIES_ARTIFACT_ID_SUFFIX)) {
166+
for (QuarkusResolvedArtifact artifact : findArtifacts(resolvedDependency, artifactsByCapability)) {
167+
if (artifact != null && artifact.file.getName().endsWith(".properties")) {
168+
try {
169+
platformImports.addPlatformProperties(moduleVersionIdentifier.getGroup(),
170+
moduleVersionIdentifier.getName(),
171+
null, "properties", moduleVersionIdentifier.getVersion(), artifact.file.toPath());
172+
} catch (AppModelResolverException e) {
173+
throw new GradleException("Failed to import platform properties " + artifact.file, e);
174+
}
161175
}
162-
} else if (artifact != null && artifact.file.getName().endsWith(".json")) {
163-
platformImports.addPlatformDescriptor(moduleVersionIdentifier.getGroup(), moduleVersionIdentifier.getName(),
164-
moduleVersionIdentifier.getVersion(), "json", moduleVersionIdentifier.getVersion());
165176
}
166177
}
167178
}
@@ -267,9 +278,9 @@ private static void collectDependencies(QuarkusResolvedClasspath classpath, Appl
267278

268279
Set<File> alreadyCollectedFiles = new HashSet<>(artifacts.size());
269280
classpath.getRoot().get().getDependencies().forEach(d -> {
270-
if (d instanceof ResolvedDependencyResult) {
281+
if (d instanceof ResolvedDependencyResult resolvedDep) {
271282
byte flags = (byte) (COLLECT_TOP_EXTENSION_RUNTIME_NODES | COLLECT_DIRECT_DEPS | COLLECT_RELOADABLE_MODULES);
272-
collectDependencies((ResolvedDependencyResult) d, modelBuilder, artifacts, wsModule, alreadyCollectedFiles,
283+
collectDependencies(resolvedDep, modelBuilder, artifacts, wsModule, alreadyCollectedFiles,
273284
new HashSet<>(), flags);
274285
}
275286
});
@@ -328,11 +339,11 @@ private static void collectDependencies(
328339
if (artifacts.isEmpty()) {
329340
byte finalFlags = flags;
330341
resolvedDependency.getSelected().getDependencies().forEach((Consumer<DependencyResult>) dependencyResult -> {
331-
if (dependencyResult instanceof ResolvedDependencyResult) {
342+
if (dependencyResult instanceof ResolvedDependencyResult resolvedDep) {
332343
ModuleVersionIdentifier dependencyId = Preconditions
333-
.checkNotNull(((ResolvedDependencyResult) dependencyResult).getSelected().getModuleVersion());
334-
if (!processedModules.contains(new GACT(dependencyId.getGroup(), dependencyId.getName()))) {
335-
collectDependencies((ResolvedDependencyResult) dependencyResult, modelBuilder, resolvedArtifacts,
344+
.checkNotNull(resolvedDep.getSelected().getModuleVersion());
345+
if (!processedModules.contains(ArtifactKey.ga(dependencyId.getGroup(), dependencyId.getName()))) {
346+
collectDependencies(resolvedDep, modelBuilder, resolvedArtifacts,
336347
projectModule,
337348
collectedArtifactFiles,
338349
processedModules, finalFlags);
@@ -347,7 +358,7 @@ private static void collectDependencies(
347358

348359
for (QuarkusResolvedArtifact artifact : artifacts) {
349360
String classifier = resolveClassifier(moduleVersionIdentifier, artifact.file);
350-
ArtifactKey artifactKey = new GACT(
361+
ArtifactKey artifactKey = ArtifactKey.of(
351362
moduleVersionIdentifier.getGroup(),
352363
moduleVersionIdentifier.getName(),
353364
classifier,
@@ -369,9 +380,7 @@ private static void collectDependencies(
369380
parentModule.addDependency(new ArtifactDependency(depCoords));
370381
}
371382

372-
PathCollection paths = null;
373-
374-
depBuilder.setResolvedPaths(paths == null ? PathList.of(artifact.file.toPath()) : paths)
383+
depBuilder.setResolvedPaths(PathList.of(artifact.file.toPath()))
375384
.setWorkspaceModule(projectModule);
376385
if (Utils.processQuarkusDependency(depBuilder, modelBuilder)) {
377386
if (isFlagOn(flags, COLLECT_TOP_EXTENSION_RUNTIME_NODES)) {
@@ -432,7 +441,7 @@ private static void collectExtensionDependencies(
432441
.checkNotNull(resolvedDependency.getSelected().getModuleVersion());
433442

434443
String classifier = resolveClassifier(moduleVersionIdentifier, artifact.file);
435-
ArtifactKey artifactKey = new GACT(moduleVersionIdentifier.getGroup(), moduleVersionIdentifier.getName(),
444+
ArtifactKey artifactKey = ArtifactKey.of(moduleVersionIdentifier.getGroup(), moduleVersionIdentifier.getName(),
436445
classifier,
437446
artifact.type);
438447
if (!alreadyVisited.add(artifactKey)) {
@@ -532,7 +541,7 @@ private QuarkusResolvedArtifact toResolvedArtifact(ResolvedArtifactResult result
532541
return new QuarkusResolvedArtifact(result.getId(), file, type);
533542
}
534543

535-
public void configureFrom(Configuration configuration) {
544+
public void configureFrom(Configuration configuration, LaunchMode mode, String appName) {
536545
ResolvableDependencies resolvableDependencies = configuration.getIncoming();
537546
getRoot().set(resolvableDependencies.getResolutionResult().getRootComponent());
538547
getResolvedArtifactCollection().set(resolvableDependencies.getArtifacts());
@@ -541,8 +550,12 @@ public void configureFrom(Configuration configuration) {
541550
// Project descriptors make sense only for projects
542551
viewConfiguration.withVariantReselection();
543552
viewConfiguration.componentFilter(component -> component instanceof ProjectComponentIdentifier);
544-
viewConfiguration.attributes(attributes -> attributes.attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE,
545-
QUARKUS_PROJECT_DESCRIPTOR_ARTIFACT_TYPE));
553+
viewConfiguration.attributes(attributes -> {
554+
attributes.attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE,
555+
QUARKUS_PROJECT_DESCRIPTOR_ARTIFACT_TYPE);
556+
DeploymentConfigurationResolver.setDeploymentAttributes(attributes, appName, mode);
557+
ConditionalDependencyResolver.setConditionalAttributes(attributes, appName, mode);
558+
});
546559
}).getFiles());
547560
}
548561
}

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusDev.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import io.quarkus.deployment.dev.DevModeMain;
7474
import io.quarkus.deployment.dev.ExtensionDevModeJvmOptionFilter;
7575
import io.quarkus.gradle.dependency.ApplicationDeploymentClasspathBuilder;
76+
import io.quarkus.gradle.dependency.ConditionalDependencyResolver;
7677
import io.quarkus.gradle.dsl.CompilerOption;
7778
import io.quarkus.gradle.dsl.CompilerOptions;
7879
import io.quarkus.gradle.extension.QuarkusPluginExtension;
@@ -566,6 +567,9 @@ private void addQuarkusDevModeDeps(DevModeCommandLineBuilder builder, Applicatio
566567
configuration.getDependencies().add(getQuarkusGradleBootstrapResolver());
567568
configuration.getDependencies().add(getQuarkusMavenBootstrapResolver());
568569
configuration.getDependencies().add(getQuarkusCoreDeployment(appModel));
570+
configuration.attributes(
571+
attrs -> attrs.attribute(ConditionalDependencyResolver.getQuarkusConditionalDependencyAttribute(
572+
getProject().getName(), LaunchMode.DEVELOPMENT), "on"));
569573
});
570574
devModeDependencyConfiguration = getProject().getConfigurations()
571575
.getByName(ApplicationDeploymentClasspathBuilder.QUARKUS_BOOTSTRAP_RESOLVER_CONFIGURATION);

devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55
import java.util.Map;
66
import java.util.Set;
77

8+
import javax.inject.Inject;
9+
810
import org.gradle.api.GradleException;
911
import org.gradle.api.Plugin;
1012
import org.gradle.api.Project;
1113
import org.gradle.api.artifacts.Configuration;
1214
import org.gradle.api.artifacts.ModuleVersionIdentifier;
1315
import org.gradle.api.artifacts.ResolvedArtifact;
16+
import org.gradle.api.internal.tasks.TaskDependencyFactory;
1417
import org.gradle.api.plugins.JavaPlugin;
1518
import org.gradle.api.tasks.SourceSet;
1619
import org.gradle.api.tasks.SourceSetContainer;
@@ -39,6 +42,13 @@ public class QuarkusExtensionPlugin implements Plugin<Project> {
3942

4043
public static final String QUARKUS_ANNOTATION_PROCESSOR = "io.quarkus:quarkus-extension-processor";
4144

45+
TaskDependencyFactory taskDepFactory;
46+
47+
@Inject
48+
public QuarkusExtensionPlugin(TaskDependencyFactory taskDepFactory) {
49+
this.taskDepFactory = taskDepFactory;
50+
}
51+
4252
@Override
4353
public void apply(Project project) {
4454
final QuarkusExtensionConfiguration quarkusExt = project.getExtensions().create(EXTENSION_CONFIGURATION_NAME,
@@ -93,7 +103,8 @@ private void registerTasks(Project project, QuarkusExtensionConfiguration quarku
93103
test.useJUnitPlatform();
94104
test.doFirst(task -> {
95105
final Map<String, Object> props = test.getSystemProperties();
96-
final ApplicationModel appModel = ToolingUtils.create(deploymentProject, LaunchMode.TEST);
106+
final ApplicationModel appModel = ToolingUtils.create(deploymentProject, LaunchMode.TEST,
107+
taskDepFactory);
97108
try {
98109
final Path serializedModel = ToolingUtils.serializeAppModel(appModel, task, true);
99110
props.put(BootstrapConstants.SERIALIZED_TEST_APP_MODEL, serializedModel.toString());
@@ -111,10 +122,10 @@ private void exportDeploymentClasspath(Project project) {
111122
DeploymentClasspathBuilder deploymentClasspathBuilder = new DeploymentClasspathBuilder(project);
112123
project.getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME).getIncoming()
113124
.beforeResolve((dependencies) -> deploymentClasspathBuilder
114-
.exportDeploymentClasspath(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME));
125+
.exportDeploymentClasspath(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, LaunchMode.NORMAL));
115126
project.getConfigurations().getByName(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME).getIncoming()
116127
.beforeResolve((testDependencies) -> deploymentClasspathBuilder
117-
.exportDeploymentClasspath(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME));
128+
.exportDeploymentClasspath(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME, LaunchMode.TEST));
118129

119130
}
120131

0 commit comments

Comments
 (0)