Skip to content

Commit f04d7e2

Browse files
committed
Move JSON generation and parsing to a new DynamicAccessMetadataUtils class, that is used by both the Maven and Gradle plugin
1 parent d001a47 commit f04d7e2

File tree

4 files changed

+62
-97
lines changed

4 files changed

+62
-97
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.graalvm.buildtools.utils;
2+
3+
import com.github.openjson.JSONArray;
4+
import com.github.openjson.JSONObject;
5+
6+
import java.io.File;
7+
import java.io.FileWriter;
8+
import java.io.IOException;
9+
import java.nio.file.Files;
10+
import java.util.LinkedHashSet;
11+
import java.util.Map;
12+
import java.util.Set;
13+
14+
public final class DynamicAccessMetadataUtils {
15+
/**
16+
* Collects all versionless artifact coordinates ({@code groupId:artifactId}) from each
17+
* entry in the {@code library-and-framework-list.json} file.
18+
*/
19+
public static Set<String> readArtifacts(File inputFile) throws IOException {
20+
Set<String> artifacts = new LinkedHashSet<>();
21+
String content = Files.readString(inputFile.toPath());
22+
JSONArray jsonArray = new JSONArray(content);
23+
for (int i = 0; i < jsonArray.length(); i++) {
24+
JSONObject entry = jsonArray.getJSONObject(i);
25+
if (entry.has("artifact")) {
26+
artifacts.add(entry.getString("artifact"));
27+
}
28+
}
29+
return artifacts;
30+
}
31+
32+
public static void serialize(File outputFile, Map<String, Set<String>> exportMap) throws IOException {
33+
JSONArray jsonArray = new JSONArray();
34+
35+
for (Map.Entry<String, Set<String>> entry : exportMap.entrySet()) {
36+
JSONObject obj = new JSONObject();
37+
obj.put("metadataProvider", entry.getKey());
38+
39+
JSONArray providedArray = new JSONArray();
40+
entry.getValue().forEach(providedArray::put);
41+
obj.put("providesFor", providedArray);
42+
43+
jsonArray.put(obj);
44+
}
45+
46+
try (FileWriter writer = new FileWriter(outputFile)) {
47+
writer.write(jsonArray.toString(2));
48+
}
49+
}
50+
}

native-gradle-plugin/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ maven {
5656
}
5757

5858
dependencies {
59-
implementation libs.openjson
6059
implementation libs.utils
6160
implementation libs.jvmReachabilityMetadata
6261
testImplementation libs.test.spock

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

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,9 @@
4040
*/
4141
package org.graalvm.buildtools.gradle.tasks;
4242

43-
import com.github.openjson.JSONArray;
44-
import com.github.openjson.JSONObject;
4543
import org.graalvm.buildtools.gradle.internal.GraalVMLogger;
4644
import org.graalvm.buildtools.gradle.internal.GraalVMReachabilityMetadataService;
45+
import org.graalvm.buildtools.utils.DynamicAccessMetadataUtils;
4746
import org.gradle.api.DefaultTask;
4847
import org.gradle.api.artifacts.Configuration;
4948
import org.gradle.api.artifacts.component.ModuleComponentIdentifier;
@@ -59,9 +58,7 @@
5958
import org.gradle.api.tasks.TaskAction;
6059

6160
import java.io.File;
62-
import java.io.FileWriter;
6361
import java.io.IOException;
64-
import java.nio.file.Files;
6562
import java.nio.file.Path;
6663
import java.util.HashMap;
6764
import java.util.LinkedHashSet;
@@ -82,9 +79,6 @@
8279
*/
8380
public abstract class GenerateDynamicAccessMetadata extends DefaultTask {
8481
private static final String LIBRARY_AND_FRAMEWORK_LIST = "library-and-framework-list.json";
85-
private static final String ARTIFACT = "artifact";
86-
private static final String METADATA_PROVIDER = "metadataProvider";
87-
private static final String PROVIDES_FOR = "providesFor";
8882

8983
public void setClasspath(Configuration classpath) {
9084
getRuntimeClasspathGraph().set(classpath.getIncoming().getResolutionResult().getRootComponent());
@@ -119,7 +113,7 @@ public void generate() {
119113
}
120114

121115
try {
122-
Set<String> artifactsToInclude = readArtifacts(jsonFile);
116+
Set<String> artifactsToInclude = DynamicAccessMetadataUtils.readArtifacts(jsonFile);
123117

124118
Map<String, String> coordinatesToPath = new HashMap<>();
125119
for (ResolvedArtifactResult artifact : getRuntimeClasspathArtifacts().get()) {
@@ -133,31 +127,12 @@ public void generate() {
133127

134128
Map<String, Set<String>> exportMap = buildExportMap(root, artifactsToInclude, coordinatesToPath);
135129

136-
writeMapToJson(getOutputJson().getAsFile().get(), exportMap);
137-
138-
GraalVMLogger.of(getLogger()).log("Dynamic Access Metadata written into " + getOutputJson().get());
130+
serializeExportMap(getOutputJson().getAsFile().get(), exportMap);
139131
} catch (IOException e) {
140132
GraalVMLogger.of(getLogger()).log("Failed to generate dynamic access metadata: {}", e);
141133
}
142134
}
143135

144-
/**
145-
* Collects all versionless artifact coordinates ({@code groupId:artifactId}) from each
146-
* entry in the {@value #LIBRARY_AND_FRAMEWORK_LIST} file.
147-
*/
148-
private Set<String> readArtifacts(File inputFile) throws IOException {
149-
Set<String> artifacts = new LinkedHashSet<>();
150-
String content = Files.readString(inputFile.toPath());
151-
JSONArray jsonArray = new JSONArray(content);
152-
for (int i = 0; i < jsonArray.length(); i++) {
153-
JSONObject entry = jsonArray.getJSONObject(i);
154-
if (entry.has(ARTIFACT)) {
155-
artifacts.add(entry.getString(ARTIFACT));
156-
}
157-
}
158-
return artifacts;
159-
}
160-
161136
/**
162137
* Builds a mapping from each entry in the classpath, whose corresponding artifact
163138
* exists in the {@value #LIBRARY_AND_FRAMEWORK_LIST} file, to the set of all of its
@@ -224,26 +199,8 @@ private void collectDependencies(ResolvedComponentResult node, Map<String, Set<S
224199
* Writes the export map to a JSON file. Each key (a classpath entry) maps to
225200
* a JSON array of classpath entry paths of its dependencies.
226201
*/
227-
private void writeMapToJson(File outputFile, Map<String, Set<String>> exportMap) {
228-
try {
229-
JSONArray jsonArray = new JSONArray();
230-
231-
for (Map.Entry<String, Set<String>> entry : exportMap.entrySet()) {
232-
JSONObject obj = new JSONObject();
233-
obj.put(METADATA_PROVIDER, entry.getKey());
234-
235-
JSONArray providedArray = new JSONArray();
236-
entry.getValue().forEach(providedArray::put);
237-
obj.put(PROVIDES_FOR, providedArray);
238-
239-
jsonArray.put(obj);
240-
}
241-
242-
try (FileWriter writer = new FileWriter(outputFile)) {
243-
writer.write(jsonArray.toString(2));
244-
}
245-
} catch (IOException e) {
246-
GraalVMLogger.of(getLogger()).log("Failed to write dynamic access metadata JSON: {}", e);
247-
}
202+
private void serializeExportMap(File outputFile, Map<String, Set<String>> exportMap) throws IOException {
203+
DynamicAccessMetadataUtils.serialize(outputFile, exportMap);
204+
GraalVMLogger.of(getLogger()).lifecycle("Dynamic Access Metadata written into " + outputFile);
248205
}
249206
}

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

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
*/
4141
package org.graalvm.buildtools.maven;
4242

43-
import com.github.openjson.JSONArray;
44-
import com.github.openjson.JSONObject;
4543
import org.apache.maven.artifact.Artifact;
4644
import org.apache.maven.plugin.MojoExecutionException;
4745
import org.apache.maven.plugin.MojoFailureException;
@@ -59,12 +57,11 @@
5957
import org.eclipse.aether.graph.DependencyNode;
6058
import org.eclipse.aether.repository.RemoteRepository;
6159
import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
60+
import org.graalvm.buildtools.utils.DynamicAccessMetadataUtils;
6261
import org.graalvm.reachability.internal.FileSystemRepository;
6362

6463
import java.io.File;
65-
import java.io.FileWriter;
6664
import java.io.IOException;
67-
import java.nio.file.Files;
6865
import java.util.HashMap;
6966
import java.util.LinkedHashSet;
7067
import java.util.List;
@@ -85,9 +82,6 @@
8582
@Mojo(name = "generateDynamicAccessMetadata", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, requiresDependencyResolution = ResolutionScope.RUNTIME, requiresDependencyCollection = ResolutionScope.RUNTIME)
8683
public class NativeBuildDynamicAccessMetadataMojo extends AbstractNativeMojo {
8784
private static final String LIBRARY_AND_FRAMEWORK_LIST = "library-and-framework-list.json";
88-
private static final String ARTIFACT = "artifact";
89-
private static final String METADATA_PROVIDER = "metadataProvider";
90-
private static final String PROVIDES_FOR = "providesFor";
9185

9286
@Component
9387
private RepositorySystem repoSystem;
@@ -112,7 +106,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
112106
}
113107

114108
try {
115-
Set<String> artifactsToInclude = readArtifacts(jsonFile);
109+
Set<String> artifactsToInclude = DynamicAccessMetadataUtils.readArtifacts(jsonFile);
116110

117111
Map<String, String> coordinatesToPath = new HashMap<>();
118112
for (Artifact artifact : project.getArtifacts()) {
@@ -125,31 +119,14 @@ public void execute() throws MojoExecutionException, MojoFailureException {
125119

126120
Map<String, Set<String>> exportMap = buildExportMap(artifactsToInclude, coordinatesToPath);
127121

128-
writeMapToJson(outputJson, exportMap);
122+
serializeExportMap(outputJson, exportMap);
129123
} catch (IOException e) {
130124
getLog().warn("Failed generating dynamic access metadata: " + e);
131125
} catch (DependencyCollectionException e) {
132126
getLog().warn("Failed collecting dependencies: " + e);
133127
}
134128
}
135129

136-
/**
137-
* Collects all versionless artifact coordinates ({@code groupId:artifactId}) from each
138-
* entry in the {@value #LIBRARY_AND_FRAMEWORK_LIST} file.
139-
*/
140-
private Set<String> readArtifacts(File inputFile) throws IOException {
141-
Set<String> artifacts = new LinkedHashSet<>();
142-
String content = Files.readString(inputFile.toPath());
143-
JSONArray jsonArray = new JSONArray(content);
144-
for (int i = 0; i < jsonArray.length(); i++) {
145-
JSONObject entry = jsonArray.getJSONObject(i);
146-
if (entry.has(ARTIFACT)) {
147-
artifacts.add(entry.getString(ARTIFACT));
148-
}
149-
}
150-
return artifacts;
151-
}
152-
153130
/**
154131
* Builds a mapping from each entry in the classpath, whose corresponding artifact
155132
* exists in the {@value #LIBRARY_AND_FRAMEWORK_LIST} file, to the set of all of its
@@ -206,26 +183,8 @@ private Set<String> collectDependencies(String coordinates, Map<String, String>
206183
* Writes the export map to a JSON file. Each key (a classpath entry) maps to
207184
* a JSON array of classpath entry paths of its dependencies.
208185
*/
209-
private void writeMapToJson(File outputFile, Map<String, Set<String>> exportMap) {
210-
try {
211-
JSONArray jsonArray = new JSONArray();
212-
213-
for (Map.Entry<String, Set<String>> entry : exportMap.entrySet()) {
214-
JSONObject obj = new JSONObject();
215-
obj.put(METADATA_PROVIDER, entry.getKey());
216-
217-
JSONArray providedArray = new JSONArray();
218-
entry.getValue().forEach(providedArray::put);
219-
obj.put(PROVIDES_FOR, providedArray);
220-
221-
jsonArray.put(obj);
222-
}
223-
224-
try (FileWriter writer = new FileWriter(outputFile)) {
225-
writer.write(jsonArray.toString(2));
226-
}
227-
} catch (IOException e) {
228-
getLog().warn("Failed to write export map to JSON: " + e);
229-
}
186+
private void serializeExportMap(File outputFile, Map<String, Set<String>> exportMap) throws IOException {
187+
DynamicAccessMetadataUtils.serialize(outputFile, exportMap);
188+
getLog().info("Dynamic Access Metadata written into " + outputFile);
230189
}
231190
}

0 commit comments

Comments
 (0)