Skip to content

Commit

Permalink
Merge pull request #18259 from stuartwdouglas/18252
Browse files Browse the repository at this point in the history
Don't use a generated feature for resources
  • Loading branch information
gsmet authored Jul 1, 2021
2 parents 33bc3e0 + 3cc0267 commit 8fe4284
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
Expand All @@ -22,6 +23,7 @@
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.GeneratedNativeImageClassBuildItem;
import io.quarkus.deployment.builditem.GeneratedResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ForceNonWeakReflectiveClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.JniRuntimeAccessBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;
Expand All @@ -45,6 +47,7 @@
import io.quarkus.gizmo.ResultHandle;
import io.quarkus.gizmo.TryBlock;
import io.quarkus.runtime.ResourceHelper;
import io.quarkus.runtime.graal.ResourcesFeature;

public class NativeImageAutoFeatureStep {

Expand Down Expand Up @@ -74,13 +77,29 @@ public class NativeImageAutoFeatureStep {
static final String LEGACY_LOCALIZATION_FEATURE = "com.oracle.svm.core.jdk.LocalizationFeature";
static final String LOCALIZATION_FEATURE = "com.oracle.svm.core.jdk.localization.LocalizationFeature";

@BuildStep
GeneratedResourceBuildItem generateNativeResourcesList(List<NativeImageResourceBuildItem> resources,
BuildProducer<NativeImageResourcePatternsBuildItem> resourcePatternsBuildItemBuildProducer) {
StringBuilder sb = new StringBuilder();
for (NativeImageResourceBuildItem i : resources) {
for (String r : i.getResources()) {
sb.append(r);
sb.append("\n");
}
}
//we don't want this file in the final image
resourcePatternsBuildItemBuildProducer.produce(NativeImageResourcePatternsBuildItem.builder()
.excludePattern(ResourcesFeature.META_INF_QUARKUS_NATIVE_RESOURCES_TXT).build());
return new GeneratedResourceBuildItem(ResourcesFeature.META_INF_QUARKUS_NATIVE_RESOURCES_TXT,
sb.toString().getBytes(StandardCharsets.UTF_8));
}

@BuildStep
void generateFeature(BuildProducer<GeneratedNativeImageClassBuildItem> nativeImageClass,
List<RuntimeInitializedClassBuildItem> runtimeInitializedClassBuildItems,
List<RuntimeInitializedPackageBuildItem> runtimeInitializedPackageBuildItems,
List<RuntimeReinitializedClassBuildItem> runtimeReinitializedClassBuildItems,
List<NativeImageProxyDefinitionBuildItem> proxies,
List<NativeImageResourceBuildItem> resources,
List<NativeImageResourcePatternsBuildItem> resourcePatterns,
List<NativeImageResourceBundleBuildItem> resourceBundles,
List<ReflectiveMethodBuildItem> reflectiveMethods,
Expand Down Expand Up @@ -195,13 +214,6 @@ public void write(String s, byte[] bytes) {
}
}

for (NativeImageResourceBuildItem i : resources) {
for (String j : i.getResources()) {
overallCatch.invokeStaticMethod(ofMethod(ResourceHelper.class, "registerResources", void.class, String.class),
overallCatch.load(j));
}
}

/* Resource includes and excludes */
if (!resourcePatterns.isEmpty()) {
ResultHandle resourcesRegistrySingleton = overallCatch.invokeStaticMethod(IMAGE_SINGLETONS_LOOKUP,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.runtime.graal;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.graalvm.nativeimage.hosted.Feature;

import com.oracle.svm.core.annotate.AutomaticFeature;

import io.quarkus.runtime.ResourceHelper;

@AutomaticFeature
public class ResourcesFeature implements Feature {

public static final String META_INF_QUARKUS_NATIVE_RESOURCES_TXT = "META-INF/quarkus-native-resources.txt";

@Override
public void beforeAnalysis(BeforeAnalysisAccess access) {
try (BufferedReader in = new BufferedReader(new InputStreamReader(
getClass().getClassLoader().getResourceAsStream(META_INF_QUARKUS_NATIVE_RESOURCES_TXT)))) {
String line;
while ((line = in.readLine()) != null) {
if (!line.isEmpty()) {
ResourceHelper.registerResources(line);
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ public void excludedNative() {
.get("/resources/test-resources/excluded/unwanted.txt")
.then()
.statusCode(404);

RestAssured.when()
.get("/resources/META-INF/quarkus-native-resources.txt")
.then()
.statusCode(404);
}

}

0 comments on commit 8fe4284

Please sign in to comment.