Skip to content

Commit 31deced

Browse files
authored
Merge pull request #876 from graalvm/bm/add-goal-descriptions-to-plugins
Add plugin descriptions
2 parents 2cd3fb0 + d839662 commit 31deced

21 files changed

Lines changed: 128 additions & 21 deletions

File tree

native-gradle-plugin/src/functionalTest/groovy/org/graalvm/buildtools/gradle/OfficialMetadataRepoFunctionalTest.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@ class OfficialMetadataRepoFunctionalTest extends AbstractFunctionalTest {
5959
succeeded ':jar', ':nativeCompile', ':nativeRun'
6060
}
6161

62+
and: "the run succeeded and retrieved data from the database"
63+
outputContains "Customers in the database"
64+
6265
and: "finds metadata in the remote repository"
6366
outputContains "[graalvm reachability metadata repository for com.h2database:h2:"
6467
outputContains "Configuration directory is com.h2database" + File.separator + "h2" + File.separator
65-
outputDoesNotContain "Falling back to the default repository at"
6668
}
6769

6870
def "the application doesn't run when usage of the official metadata repository is disabled"() {

native-gradle-plugin/src/main/java/org/graalvm/buildtools/gradle/NativeImagePlugin.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,8 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
290290

291291
TaskProvider<BuildNativeImageTask> imageBuilder = tasks.named(NATIVE_COMPILE_TASK_NAME, BuildNativeImageTask.class);
292292
tasks.register(DEPRECATED_NATIVE_BUILD_TASK, t -> {
293+
t.setGroup(LifecycleBasePlugin.BUILD_GROUP);
294+
t.setDescription("Deprecated alias for nativeCompile.");
293295
t.dependsOn(imageBuilder);
294296
t.doFirst("Warn about deprecation", task -> task.getLogger().warn("Task " + DEPRECATED_NATIVE_BUILD_TASK + " is deprecated. Use " + NATIVE_COMPILE_TASK_NAME + " instead."));
295297
});
@@ -301,7 +303,7 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
301303

302304
project.getTasks().register("metadataCopy", MetadataCopyTask.class, task -> {
303305
task.setGroup(LifecycleBasePlugin.BUILD_GROUP);
304-
task.setDescription("Copies metadata collected from tasks instrumented with the agent into target directories");
306+
task.setDescription("Copies and optionally merges metadata collected by agent-instrumented tasks into target directories.");
305307
task.getInputTaskNames().set(graalExtension.getAgent().getMetadataCopy().getInputTaskNames());
306308
task.getOutputDirectories().set(graalExtension.getAgent().getMetadataCopy().getOutputDirectories());
307309
task.getMergeWithExisting().set(graalExtension.getAgent().getMetadataCopy().getMergeWithExisting());
@@ -310,7 +312,7 @@ private void configureJavaProject(Project project, Provider<NativeImageService>
310312

311313
project.getTasks().register("collectReachabilityMetadata", CollectReachabilityMetadata.class, task -> {
312314
task.setGroup(LifecycleBasePlugin.BUILD_GROUP);
313-
task.setDescription("Obtains native reachability metadata for the runtime classpath configuration");
315+
task.setDescription("Collects reachability metadata for the runtime classpath.");
314316
task.setClasspath(project.getConfigurations().getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME));
315317
});
316318

@@ -371,7 +373,7 @@ private void configureAutomaticTaskCreation(Project project,
371373
}
372374
TaskProvider<BuildNativeImageTask> imageBuilder = tasks.register(compileTaskName,
373375
BuildNativeImageTask.class, builder -> {
374-
builder.setDescription("Compiles a native image for the " + options.getName() + " binary");
376+
builder.setDescription("Builds a native executable for the " + options.getName() + " binary.");
375377
builder.setGroup(LifecycleBasePlugin.BUILD_GROUP);
376378
builder.getOptions().convention(options);
377379
builder.getUseArgFile().convention(graalExtension.getUseArgFile());
@@ -401,7 +403,7 @@ private void configureAutomaticTaskCreation(Project project,
401403
}
402404
tasks.register(runTaskName, NativeRunTask.class, task -> {
403405
task.setGroup(LifecycleBasePlugin.BUILD_GROUP);
404-
task.setDescription("Executes the " + options.getName() + " native binary");
406+
task.setDescription("Runs the " + options.getName() + " native binary.");
405407
task.getImage().convention(imageBuilder.flatMap(BuildNativeImageTask::getOutputFile));
406408
task.getRuntimeArgs().convention(options.getRuntimeArgs());
407409
var useLayers = options.getLayers()
@@ -660,7 +662,7 @@ private static GraalVMReachabilityMetadataRepositoryExtension reachabilityExtens
660662
private void configureClasspathJarFor(TaskContainer tasks, NativeImageOptions options, TaskProvider<BuildNativeImageTask> imageBuilder) {
661663
String baseName = imageBuilder.getName();
662664
TaskProvider<Jar> classpathJar = tasks.register(baseName + "ClasspathJar", Jar.class, jar -> {
663-
jar.setDescription("Builds a pathing jar for the " + options.getName() + " native binary");
665+
jar.setDescription("Builds a pathing JAR for the " + options.getName() + " native binary classpath.");
664666
jar.from(
665667
options.getClasspath()
666668
.getElements()
@@ -729,7 +731,7 @@ private TaskProvider<GenerateResourcesConfigFile> registerResourcesConfigTask(Pr
729731
FileCollection transitiveProjectArtifacts,
730732
String name) {
731733
return tasks.register(name, GenerateResourcesConfigFile.class, task -> {
732-
task.setDescription("Generates a GraalVM resource-config.json file");
734+
task.setDescription("Scans resources and generates a resource-config.json file for the " + options.getName() + " binary.");
733735
task.getOptions().convention(options.getResources());
734736
task.getClasspath().from(options.getClasspath());
735737
task.getTransitiveProjectArtifacts().from(transitiveProjectArtifacts);
@@ -860,6 +862,8 @@ public void registerTestBinary(Project project,
860862
});
861863
if (isPrimaryTest) {
862864
tasks.register(DEPRECATED_NATIVE_TEST_BUILD_TASK, t -> {
865+
t.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP);
866+
t.setDescription("Deprecated alias for nativeTestCompile.");
863867
t.dependsOn(testImageBuilder);
864868
t.doFirst("Warn about deprecation", task -> task.getLogger().warn("Task " + DEPRECATED_NATIVE_TEST_BUILD_TASK + " is deprecated. Use " + NATIVE_TEST_COMPILE_TASK_NAME + " instead."));
865869
});

native-gradle-plugin/src/test/groovy/org/graalvm/buildtools/gradle/NativeImagePluginTest.groovy

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.graalvm.buildtools.gradle
33
import org.graalvm.buildtools.gradle.dsl.GraalVMExtension
44
import org.graalvm.buildtools.gradle.dsl.GraalVMReachabilityMetadataRepositoryExtension
55
import org.gradle.api.Project
6+
import org.gradle.api.Task
67
import org.gradle.testfixtures.ProjectBuilder
78
import spock.lang.Issue
89
import spock.lang.Specification
@@ -49,6 +50,30 @@ class NativeImagePluginTest extends Specification {
4950
"https://custom.uri" | 'ignored' | 'https://custom.uri' | null
5051
}
5152

53+
def "registers descriptions for user-facing tasks"() {
54+
when:
55+
project.plugins.apply("java")
56+
57+
then:
58+
taskDescription("nativeCompile") == "Builds a native executable for the main binary."
59+
taskDescription("nativeRun") == "Runs the main native binary."
60+
taskDescription("nativeBuild") == "Deprecated alias for nativeCompile."
61+
taskDescription("metadataCopy") == "Copies and optionally merges metadata collected by agent-instrumented tasks into target directories."
62+
taskDescription("collectReachabilityMetadata") == "Collects reachability metadata for the runtime classpath."
63+
taskDescription("nativeCompileClasspathJar") == "Builds a pathing JAR for the main native binary classpath."
64+
taskDescription("generateResourcesConfigFile") == "Scans resources and generates a resource-config.json file for the main binary."
65+
taskDescription("nativeTestCompile") == "Builds a native executable for the test binary."
66+
taskDescription("nativeTest") == "Runs the test native binary."
67+
taskDescription("nativeTestBuild") == "Deprecated alias for nativeTestCompile."
68+
taskDescription("generateTestResourcesConfigFile") == "Scans resources and generates a resource-config.json file for the test binary."
69+
}
70+
71+
private String taskDescription(String name) {
72+
Task task = project.tasks.getByName(name)
73+
assert task.description != null
74+
task.description
75+
}
76+
5277
private void repositoryUriFor(String configuredUri, String version) {
5378
if (configuredUri != null) {
5479
reachabilityMetadataRepositoryExtension.uri.set(new URI(configuredUri))

native-maven-plugin/build-plugins/src/main/kotlin/org.graalvm.build.maven-plugin.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ val preparePluginDescriptor = tasks.register<Copy>("preparePluginDescriptor") {
5959
}) {
6060
rename { "pom.xml" }
6161
}
62+
from(sourceSets.getByName("main").allJava) {
63+
into("src/main/java")
64+
}
6265
from(sourceSets.getByName("main").output.classesDirs) {
6366
into("target/classes")
6467
}

native-maven-plugin/build.gradle.kts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
*/
4141

4242
import org.graalvm.build.maven.MavenTask
43-
import org.gradle.util.GFileUtils
4443

4544
plugins {
4645
`java-library`
@@ -154,7 +153,13 @@ val prepareMavenLocalRepo = tasks.register<MavenTask>("prepareMavenLocalRepo") {
154153
}
155154

156155
val launcher = javaToolchains.launcherFor {
157-
languageVersion.set(JavaLanguageVersion.of(17))
156+
languageVersion.set(
157+
providers.gradleProperty("mavenFunctionalTestJavaVersion")
158+
.orElse(providers.gradleProperty("javaToolchainVersion"))
159+
.orElse("17")
160+
.map(String::toInt)
161+
.map(JavaLanguageVersion::of)
162+
)
158163
}
159164

160165
tasks {

native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,38 @@ class JavaApplicationFunctionalTest extends AbstractGraalVMMavenFunctionalTest {
143143
outputContains "Args file written to: target" + File.separator + "native-image"
144144
}
145145
146+
def "help describe includes goal descriptions"() {
147+
withSample("java-application")
148+
149+
when:
150+
mvn 'help:describe', "-Dplugin=org.graalvm.buildtools:native-maven-plugin:${System.getProperty('native.maven.plugin.version')}"
151+
152+
then:
153+
buildSucceeded
154+
outputContains "org.graalvm.buildtools:native-maven-plugin:${System.getProperty('native.maven.plugin.version')}"
155+
outputContains "native:add-reachability-metadata"
156+
outputContains "metadata repository"
157+
outputContains "project's output directory"
158+
outputContains "native:compile"
159+
outputContains "Builds a native executable by forking Maven"
160+
outputContains "native:compile-no-fork"
161+
outputContains "separate Maven build"
162+
outputContains "native:generateDynamicAccessMetadata"
163+
outputContains "dynamic access metadata"
164+
outputContains "Build Report"
165+
outputContains "native:generateResourceConfig"
166+
outputContains "resource metadata"
167+
outputContains "native:generateTestResourceConfig"
168+
outputContains "native:list-libraries-missing-metadata"
169+
outputContains "reachability metadata"
170+
outputContains "native:merge-agent-files"
171+
outputContains "Merges tracing agent output"
172+
outputContains "native:metadata-copy"
173+
outputContains "META-INF/native-image"
174+
outputContains "native:test"
175+
outputContains "native executables"
176+
outputContains "native:write-args-file"
177+
outputContains "args file"
178+
}
179+
146180
}

native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/OfficialMetadataRepositoryFunctionalTest.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ class OfficialMetadataRepositoryFunctionalTest extends AbstractGraalVMMavenFunct
6262
and: "finds metadata in the remote repository"
6363
outputContains "[graalvm reachability metadata repository for com.h2database:h2:"
6464
outputContains "Configuration directory is com.h2database" + File.separator + "h2" + File.separator
65-
outputDoesNotContain "Falling back to the default repository."
6665
}
6766

6867
@IgnoreIf({ os.windows })

native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AddReachabilityMetadataMojo.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@
5757
import org.apache.maven.plugins.annotations.ResolutionScope;
5858
import org.graalvm.reachability.DirectoryConfiguration;
5959

60+
/**
61+
* Adds dependency reachability metadata from the configured metadata repository to the project's output directory.
62+
*/
6063
@Mojo(name = "add-reachability-metadata", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, requiresDependencyResolution = ResolutionScope.RUNTIME, requiresDependencyCollection = ResolutionScope.RUNTIME)
6164
public class AddReachabilityMetadataMojo extends AbstractNativeMojo {
6265

native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/DeprecatedNativeBuildMojo.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@
4747
import org.apache.maven.plugins.annotations.ResolutionScope;
4848

4949
/**
50-
* Mojo used to invoke native image building by attaching it to a phase.
51-
* Deprecated in favor of compile-no-fork goal.
50+
* Deprecated alias for the {@code native:compile-no-fork} goal for lifecycle-bound native image builds.
5251
*/
5352
@Deprecated
5453
@Mojo(name = "build", defaultPhase = LifecyclePhase.PACKAGE,

native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/ListLibrariesMissingMetadataMojo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
import java.util.Map;
5959
import java.util.stream.Collectors;
6060

61+
/**
62+
* Lists direct runtime dependencies that do not have reachability metadata in the configured metadata repository.
63+
* Optionally creates reachability metadata repository issues requesting support for libraries with missing metadata.
64+
*/
6165
@Mojo(name = "list-libraries-missing-metadata", defaultPhase = LifecyclePhase.NONE,
6266
requiresDependencyResolution = ResolutionScope.RUNTIME, requiresDependencyCollection = ResolutionScope.RUNTIME)
6367
public class ListLibrariesMissingMetadataMojo extends AbstractNativeMojo {

0 commit comments

Comments
 (0)