|
59 | 59 | import org.graalvm.buildtools.gradle.internal.NativeConfigurations;
|
60 | 60 | import org.graalvm.buildtools.gradle.internal.agent.AgentConfigurationFactory;
|
61 | 61 | import org.graalvm.buildtools.gradle.tasks.BuildNativeImageTask;
|
| 62 | +import org.graalvm.buildtools.gradle.tasks.CollectReachabilityMetadata; |
62 | 63 | import org.graalvm.buildtools.gradle.tasks.GenerateResourcesConfigFile;
|
63 | 64 | import org.graalvm.buildtools.gradle.tasks.MetadataCopyTask;
|
64 | 65 | import org.graalvm.buildtools.gradle.tasks.NativeRunTask;
|
|
99 | 100 | import org.gradle.api.tasks.OutputDirectory;
|
100 | 101 | import org.gradle.api.tasks.SourceSet;
|
101 | 102 | import org.gradle.api.tasks.SourceSetContainer;
|
| 103 | +import org.gradle.api.tasks.TaskCollection; |
102 | 104 | import org.gradle.api.tasks.TaskContainer;
|
103 | 105 | import org.gradle.api.tasks.TaskProvider;
|
104 | 106 | import org.gradle.api.tasks.bundling.AbstractArchiveTask;
|
@@ -271,6 +273,26 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
|
271 | 273 | task.getMergeWithExisting().set(graalExtension.getAgent().getMetadataCopy().getMergeWithExisting());
|
272 | 274 | task.getToolchainDetection().set(graalExtension.getToolchainDetection());
|
273 | 275 | });
|
| 276 | + |
| 277 | + project.getTasks().register("collectReachabilityMetadata", CollectReachabilityMetadata.class, task -> { |
| 278 | + task.setGroup(LifecycleBasePlugin.BUILD_GROUP); |
| 279 | + task.setDescription("Obtains native reachability metdata for the runtime classpath configuration"); |
| 280 | + }); |
| 281 | + |
| 282 | + GraalVMReachabilityMetadataRepositoryExtension metadataRepositoryExtension = reachabilityExtensionOn(graalExtension); |
| 283 | + TaskCollection<CollectReachabilityMetadata> reachabilityMetadataCopyTasks = project.getTasks() |
| 284 | + .withType(CollectReachabilityMetadata.class); |
| 285 | + reachabilityMetadataCopyTasks.configureEach(task -> { |
| 286 | + Provider<GraalVMReachabilityMetadataService> reachabilityMetadataService = graalVMReachabilityMetadataService( |
| 287 | + project, metadataRepositoryExtension); |
| 288 | + task.getMetadataService().set(reachabilityMetadataService); |
| 289 | + task.usesService(reachabilityMetadataService); |
| 290 | + task.getUri().convention(task.getVersion().map(this::getReachabilityMetadataRepositoryUrlForVersion) |
| 291 | + .orElse(metadataRepositoryExtension.getUri())); |
| 292 | + task.getExcludedModules().convention(metadataRepositoryExtension.getExcludedModules()); |
| 293 | + task.getModuleToConfigVersion().convention(metadataRepositoryExtension.getModuleToConfigVersion()); |
| 294 | + task.getInto().convention(project.getLayout().getBuildDirectory().dir("native-reachability-metadata")); |
| 295 | + }); |
274 | 296 | }
|
275 | 297 |
|
276 | 298 | private void configureAutomaticTaskCreation(Project project,
|
@@ -320,14 +342,7 @@ private void configureAutomaticTaskCreation(Project project,
|
320 | 342 |
|
321 | 343 | private void configureJvmReachabilityConfigurationDirectories(Project project, GraalVMExtension graalExtension, NativeImageOptions options, SourceSet sourceSet) {
|
322 | 344 | GraalVMReachabilityMetadataRepositoryExtension repositoryExtension = reachabilityExtensionOn(graalExtension);
|
323 |
| - Provider<GraalVMReachabilityMetadataService> serviceProvider = project.getGradle() |
324 |
| - .getSharedServices() |
325 |
| - .registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> { |
326 |
| - LogLevel logLevel = determineLogLevel(); |
327 |
| - spec.getParameters().getLogLevel().set(logLevel); |
328 |
| - spec.getParameters().getUri().set(repositoryExtension.getUri()); |
329 |
| - spec.getParameters().getCacheDir().set(new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories")); |
330 |
| - }); |
| 345 | + Provider<GraalVMReachabilityMetadataService> serviceProvider = graalVMReachabilityMetadataService(project, repositoryExtension); |
331 | 346 | options.getConfigurationFileDirectories().from(repositoryExtension.getEnabled().flatMap(enabled -> {
|
332 | 347 | if (enabled) {
|
333 | 348 | if (repositoryExtension.getUri().isPresent()) {
|
@@ -358,14 +373,7 @@ private void configureJvmReachabilityConfigurationDirectories(Project project, G
|
358 | 373 |
|
359 | 374 | private void configureJvmReachabilityExcludeConfigArgs(Project project, GraalVMExtension graalExtension, NativeImageOptions options, SourceSet sourceSet) {
|
360 | 375 | GraalVMReachabilityMetadataRepositoryExtension repositoryExtension = reachabilityExtensionOn(graalExtension);
|
361 |
| - Provider<GraalVMReachabilityMetadataService> serviceProvider = project.getGradle() |
362 |
| - .getSharedServices() |
363 |
| - .registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> { |
364 |
| - LogLevel logLevel = determineLogLevel(); |
365 |
| - spec.getParameters().getLogLevel().set(logLevel); |
366 |
| - spec.getParameters().getUri().set(repositoryExtension.getUri()); |
367 |
| - spec.getParameters().getCacheDir().set(new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories")); |
368 |
| - }); |
| 376 | + Provider<GraalVMReachabilityMetadataService> serviceProvider = graalVMReachabilityMetadataService(project, repositoryExtension); |
369 | 377 | options.getExcludeConfig().putAll(repositoryExtension.getEnabled().flatMap(enabled -> {
|
370 | 378 | if (enabled) {
|
371 | 379 | if (repositoryExtension.getUri().isPresent()) {
|
@@ -397,6 +405,18 @@ private void configureJvmReachabilityExcludeConfigArgs(Project project, GraalVME
|
397 | 405 | }));
|
398 | 406 | }
|
399 | 407 |
|
| 408 | + private Provider<GraalVMReachabilityMetadataService> graalVMReachabilityMetadataService(Project project, |
| 409 | + GraalVMReachabilityMetadataRepositoryExtension repositoryExtension) { |
| 410 | + return project.getGradle() |
| 411 | + .getSharedServices() |
| 412 | + .registerIfAbsent("nativeConfigurationService", GraalVMReachabilityMetadataService.class, spec -> { |
| 413 | + LogLevel logLevel = determineLogLevel(); |
| 414 | + spec.getParameters().getLogLevel().set(logLevel); |
| 415 | + spec.getParameters().getUri().set(repositoryExtension.getUri()); |
| 416 | + spec.getParameters().getCacheDir().set(new File(project.getGradle().getGradleUserHomeDir(), "native-build-tools/repositories")); |
| 417 | + }); |
| 418 | + } |
| 419 | + |
400 | 420 | private static LogLevel determineLogLevel() {
|
401 | 421 | LogLevel logLevel = LogLevel.DEBUG;
|
402 | 422 | String loggingProperty = System.getProperty(CONFIG_REPO_LOGLEVEL);
|
@@ -475,17 +495,19 @@ private void configureNativeConfigurationRepo(ExtensionAware graalvmNative) {
|
475 | 495 | GraalVMReachabilityMetadataRepositoryExtension configurationRepository = graalvmNative.getExtensions().create("metadataRepository", GraalVMReachabilityMetadataRepositoryExtension.class);
|
476 | 496 | configurationRepository.getEnabled().convention(false);
|
477 | 497 | configurationRepository.getVersion().convention(SharedConstants.METADATA_REPO_DEFAULT_VERSION);
|
478 |
| - configurationRepository.getUri().convention(configurationRepository.getVersion().map(v -> { |
479 |
| - try { |
480 |
| - return new URI(String.format(METADATA_REPO_URL_TEMPLATE, v)); |
481 |
| - } catch (URISyntaxException e) { |
482 |
| - throw new RuntimeException(e); |
483 |
| - } |
484 |
| - })); |
| 498 | + configurationRepository.getUri().convention(configurationRepository.getVersion().map(this::getReachabilityMetadataRepositoryUrlForVersion)); |
485 | 499 | configurationRepository.getExcludedModules().convention(Collections.emptySet());
|
486 | 500 | configurationRepository.getModuleToConfigVersion().convention(Collections.emptyMap());
|
487 | 501 | }
|
488 | 502 |
|
| 503 | + private URI getReachabilityMetadataRepositoryUrlForVersion(String version) { |
| 504 | + try { |
| 505 | + return new URI(String.format(METADATA_REPO_URL_TEMPLATE, version)); |
| 506 | + } catch (URISyntaxException e) { |
| 507 | + throw new RuntimeException(e); |
| 508 | + } |
| 509 | + } |
| 510 | + |
489 | 511 | private TaskProvider<GenerateResourcesConfigFile> registerResourcesConfigTask(Provider<Directory> generatedDir,
|
490 | 512 | NativeImageOptions options,
|
491 | 513 | TaskContainer tasks,
|
|
0 commit comments