Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.quarkus.deployment.builditem;

import java.util.Objects;

import org.graalvm.nativeimage.hosted.Feature;

import io.quarkus.builder.item.MultiBuildItem;

/**
* Represents a GraalVM {@link Feature} to be passed to native-image through the {@code --features} options.
*/
public final class NativeImageFeatureBuildItem extends MultiBuildItem {

private final String qualifiedName;

public NativeImageFeatureBuildItem(Class<? extends Feature> featureClass) {
this.qualifiedName = Objects.requireNonNull(featureClass).getName();
}

public NativeImageFeatureBuildItem(String qualifiedName) {
this.qualifiedName = Objects.requireNonNull(qualifiedName);
}

public String getQualifiedName() {
return qualifiedName;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.quarkus.bootstrap.util.IoUtils;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ExcludeConfigBuildItem;
import io.quarkus.deployment.builditem.nativeimage.JPMSExportBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageAllowIncompleteClasspathAggregateBuildItem;
Expand All @@ -45,8 +46,11 @@
import io.quarkus.deployment.pkg.builditem.ProcessInheritIODisabled;
import io.quarkus.deployment.pkg.builditem.ProcessInheritIODisabledBuildItem;
import io.quarkus.deployment.steps.LocaleProcessor;
import io.quarkus.deployment.steps.NativeImageFeatureStep;
import io.quarkus.maven.dependency.ResolvedDependency;
import io.quarkus.runtime.LocalesBuildTimeConfig;
import io.quarkus.runtime.graal.DisableLoggingFeature;
import io.quarkus.runtime.graal.ResourcesFeature;

public class NativeImageBuildStep {

Expand Down Expand Up @@ -81,6 +85,13 @@ void addExportsToNativeImage(BuildProducer<JPMSExportBuildItem> exports) {
exports.produce(new JPMSExportBuildItem("org.graalvm.nativeimage.builder", "com.oracle.svm.core.jdk"));
}

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
void nativeImageFeatures(BuildProducer<NativeImageFeatureBuildItem> features) {
features.produce(new NativeImageFeatureBuildItem(NativeImageFeatureStep.GRAAL_FEATURE));
features.produce(new NativeImageFeatureBuildItem(ResourcesFeature.class));
features.produce(new NativeImageFeatureBuildItem(DisableLoggingFeature.class));
}

@BuildStep(onlyIf = NativeBuild.class)
ArtifactResultBuildItem result(NativeImageBuildItem image) {
NativeImageBuildItem.GraalVMVersion graalVMVersion = image.getGraalVMInfo();
Expand All @@ -103,7 +114,8 @@ ArtifactResultBuildItem nativeSourcesResult(NativeConfig nativeConfig,
List<ExcludeConfigBuildItem> excludeConfigs,
NativeImageAllowIncompleteClasspathAggregateBuildItem incompleteClassPathAllowed,
List<JPMSExportBuildItem> jpmsExportBuildItems,
List<NativeImageSecurityProviderBuildItem> nativeImageSecurityProviders) {
List<NativeImageSecurityProviderBuildItem> nativeImageSecurityProviders,
List<NativeImageFeatureBuildItem> nativeImageFeatures) {

Path outputDir;
try {
Expand Down Expand Up @@ -132,6 +144,7 @@ ArtifactResultBuildItem nativeSourcesResult(NativeConfig nativeConfig,
// the path to native-image is not known now, it is only known at the time the native-sources will be consumed
.setNativeImageName(nativeImageName)
.setGraalVMVersion(GraalVM.Version.CURRENT)
.setNativeImageFeatures(nativeImageFeatures)
.build();
List<String> command = nativeImageArgs.getArgs();
try (FileOutputStream commandFOS = new FileOutputStream(outputDir.resolve("native-image.args").toFile())) {
Expand Down Expand Up @@ -166,7 +179,8 @@ public NativeImageBuildItem build(NativeConfig nativeConfig, LocalesBuildTimeCon
List<UnsupportedOSBuildItem> unsupportedOses,
CompiledJavaVersionBuildItem compiledJavaVersionBuildItem,
Optional<ProcessInheritIODisabled> processInheritIODisabled,
Optional<ProcessInheritIODisabledBuildItem> processInheritIODisabledBuildItem) {
Optional<ProcessInheritIODisabledBuildItem> processInheritIODisabledBuildItem,
List<NativeImageFeatureBuildItem> nativeImageFeatures) {
if (nativeConfig.debug.enabled) {
copyJarSourcesToLib(outputTargetBuildItem, curateOutcomeBuildItem);
copySourcesToSourceCache(outputTargetBuildItem);
Expand Down Expand Up @@ -236,6 +250,7 @@ public NativeImageBuildItem build(NativeConfig nativeConfig, LocalesBuildTimeCon
.setNativeImageName(nativeImageName)
.setNoPIE(noPIE)
.setGraalVMVersion(graalVMVersion)
.setNativeImageFeatures(nativeImageFeatures)
.build();

List<String> nativeImageArgs = commandAndExecutable.args;
Expand Down Expand Up @@ -513,6 +528,7 @@ static class Builder {
private List<JPMSExportBuildItem> jpmsExports;
private List<NativeMinimalJavaVersionBuildItem> nativeMinimalJavaVersions;
private List<UnsupportedOSBuildItem> unsupportedOSes;
private List<NativeImageFeatureBuildItem> nativeImageFeatures;
private Path outputDir;
private String runnerJarName;
private String noPIE = "";
Expand Down Expand Up @@ -573,6 +589,11 @@ public Builder setUnsupportedOSes(
return this;
}

public Builder setNativeImageFeatures(List<NativeImageFeatureBuildItem> nativeImageFeatures) {
this.nativeImageFeatures = nativeImageFeatures;
return this;
}

public Builder setOutputDir(Path outputDir) {
this.outputDir = outputDir;
return this;
Expand Down Expand Up @@ -650,6 +671,15 @@ public NativeImageInvokerInfo build() {
enableHttpsUrlHandler = true;
}

if (nativeImageFeatures == null || nativeImageFeatures.isEmpty()) {
throw new IllegalStateException("GraalVM features can't be empty, quarkus core is using some.");
}
List<String> featuresList = new ArrayList<>(nativeImageFeatures.size());
for (NativeImageFeatureBuildItem nativeImageFeature : nativeImageFeatures) {
featuresList.add(nativeImageFeature.getQualifiedName());
}
nativeImageArgs.add("--features=" + String.join(",", featuresList));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this work properly if one of the feature is a nested class? I'm worried about $ escaping.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's an interesting question, I'll give it a try.

PS: Why would one define a feature as a nested class though?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PS: Why would one define a feature as a nested class though?

People are weird :).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good question, and possible :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to my tests the $ is being properly escaped but we still can't use nested classes for defining a Feature even when using @AutomaticFeature (i.e. without this PR).

native-image fails with:

Error: Error instantiating Feature class io.quarkus.runtime.graal.DisableLoggingFeature$NestedDisableLoggingFeature. Ensure the class is not abstract and has a no-argument constructor.
com.oracle.svm.core.util.UserError$UserException: Error instantiating Feature class io.quarkus.runtime.graal.DisableLoggingFeature$NestedDisableLoggingFeature. Ensure the class is not abstract and has a no-argument constructor.
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.UserError.abort(UserError.java:84)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.registerFeature(FeatureHandler.java:180)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.registerFeatures(FeatureHandler.java:128)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:836)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:559)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:519)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:407)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:585)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128)
Caused by: java.lang.NoSuchMethodException: io.quarkus.runtime.graal.DisableLoggingFeature$NestedDisableLoggingFeature.<init>()
	at java.base/java.lang.Class.getConstructor0(Class.java:3349)
	at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2553)
	at org.graalvm.nativeimage.base/com.oracle.svm.util.ReflectionUtil.lookupConstructor(ReflectionUtil.java:81)
	at org.graalvm.nativeimage.base/com.oracle.svm.util.ReflectionUtil.lookupConstructor(ReflectionUtil.java:76)
	at org.graalvm.nativeimage.base/com.oracle.svm.util.ReflectionUtil.newInstance(ReflectionUtil.java:95)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.registerFeature(FeatureHandler.java:178)
	... 7 more

Explicitly defining the default public constructor doesn't help either.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is essentially happening because inner classes don't actually have "a no-argument constructor" since the seemingly no-argument default constructor of inner classes takes as argument an instance of the outer class. However, GraalVM doesn't handle this case so it doesn't support defining nested Features.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static nested features should work though, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point! In that case everything works as expected ($ gets escaped and the feature gets registered).

E.g.:

...
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] /home/zakkak/code/graal/sdk/latest_graalvm_home/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=3 -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Duser.language=en -J-Duser.country=IE -J-Dfile.encoding=UTF-8 --features=io.quarkus.runner.Feature,io.quarkus.runtime.graal.ResourcesFeature,io.quarkus.runtime.graal.DisableLoggingFeature\$NestedDisableLoggingFeature -H:-ParseOnce -J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED -J--add-opens=java.base/java.text=ALL-UNNAMED -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\$BySpaceAndTime -H:+JNI -H:+AllowFoldMethods -J-Djava.awt.headless=true -H:FallbackThreshold=0 --link-at-build-time -H:+ReportExceptionStackTraces -g -H:DebugInfoSourceSearchPath=app-sources -H:-AddAllCharsets -H:EnableURLProtocols=http -H:NativeLinkerOption=-no-pie -H:-UseServiceLoaderFeature -H:+StackTrace -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jni=ALL-UNNAMED -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.localization=ALL-UNNAMED -J--add-exports=org.graalvm.nativeimage.base/com.oracle.svm.util=ALL-UNNAMED quarkus-integration-test-awt-999-SNAPSHOT-runner -jar quarkus-integration-test-awt-999-SNAPSHOT-runner.jar
...
[1/7] Initializing...                                                                                   (17.0s @ 0.16GB)
 Version info: 'GraalVM 22.2.0-dev Java 11 CE'
 Java version info: '11.0.16+5-jvmci-22.2-b03'
 C compiler: gcc (redhat, x86_64, 12.1.1)
 Garbage collector: Serial GC
 5 user-specific feature(s)
 - io.quarkus.awt.runtime.graal.AwtFeature
 - io.quarkus.runner.Feature
 - io.quarkus.runtime.graal.DisableLoggingFeature$NestedDisableLoggingFeature
 - io.quarkus.runtime.graal.ResourcesFeature
 - org.graalvm.home.HomeFinderFeature: Finds GraalVM paths and its version number

Notice the --features=io.quarkus.runner.Feature,io.quarkus.runtime.graal.ResourcesFeature,io.quarkus.runtime.graal.DisableLoggingFeature\$NestedDisableLoggingFeature parameter.


/*
* Instruct GraalVM / Mandrel parse compiler graphs twice, once for the static analysis and once again
* for the AOT compilation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@
import io.quarkus.runtime.graal.ResourcesFeature;
import io.quarkus.runtime.graal.WeakReflection;

public class NativeImageAutoFeatureStep {
public class NativeImageFeatureStep {

private static final String GRAAL_AUTOFEATURE = "io.quarkus.runner.AutoFeature";
public static final String GRAAL_FEATURE = "io.quarkus.runner.Feature";
private static final MethodDescriptor VERSION_CURRENT = ofMethod(Version.class, "getCurrent", Version.class);
private static final MethodDescriptor VERSION_COMPARE_TO = ofMethod(Version.class, "compareTo", int.class, int[].class);

Expand Down Expand Up @@ -153,9 +153,8 @@ void generateFeature(BuildProducer<GeneratedNativeImageClassBuildItem> nativeIma
public void write(String s, byte[] bytes) {
nativeImageClass.produce(new GeneratedNativeImageClassBuildItem(s, bytes));
}
}, GRAAL_AUTOFEATURE, null,
}, GRAAL_FEATURE, null,
Object.class.getName(), Feature.class.getName());
file.addAnnotation("com.oracle.svm.core.annotate.AutomaticFeature");

MethodCreator duringSetup = file.getMethodCreator("duringSetup", "V", DURING_SETUP_ACCESS);
// Register Lambda Capturing Types
Expand Down Expand Up @@ -206,7 +205,7 @@ public void write(String s, byte[] bytes) {
overallCatch.load("Quarkus build time init default"));

if (!runtimeInitializedClassBuildItems.isEmpty()) {
ResultHandle thisClass = overallCatch.loadClassFromTCCL(GRAAL_AUTOFEATURE);
ResultHandle thisClass = overallCatch.loadClassFromTCCL(GRAAL_FEATURE);
ResultHandle cl = overallCatch.invokeVirtualMethod(ofMethod(Class.class, "getClassLoader", ClassLoader.class),
thisClass);
ResultHandle classes = overallCatch.newArray(Class.class,
Expand Down Expand Up @@ -238,7 +237,7 @@ public void write(String s, byte[] bytes) {

// hack in reinitialization of process info classes
if (!runtimeReinitializedClassBuildItems.isEmpty()) {
ResultHandle thisClass = overallCatch.loadClassFromTCCL(GRAAL_AUTOFEATURE);
ResultHandle thisClass = overallCatch.loadClassFromTCCL(GRAAL_FEATURE);
ResultHandle cl = overallCatch.invokeVirtualMethod(ofMethod(Class.class, "getClassLoader", ClassLoader.class),
thisClass);
ResultHandle quarkus = overallCatch.load("Quarkus");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,10 @@

import org.graalvm.nativeimage.hosted.Feature;

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

/**
* Disables logging during the analysis phase
*/
@AutomaticFeature
public class DisableLoggingAutoFeature implements Feature {
public class DisableLoggingFeature implements Feature {

private static final String[] CATEGORIES = {
"org.jboss.threads"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@

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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import static io.quarkus.deployment.builditem.nativeimage.UnsupportedOSBuildItem.Os.WINDOWS;

import io.quarkus.awt.runtime.graal.AwtFeature;
import io.quarkus.awt.runtime.graal.DarwinAwtFeature;
import io.quarkus.deployment.Feature;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.JniRuntimeAccessBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourcePatternsBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeMinimalJavaVersionBuildItem;
Expand All @@ -21,6 +24,12 @@ FeatureBuildItem feature() {
return new FeatureBuildItem(Feature.AWT);
}

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
void nativeImageFeatures(BuildProducer<NativeImageFeatureBuildItem> nativeImageFeatures) {
nativeImageFeatures.produce(new NativeImageFeatureBuildItem(AwtFeature.class));
nativeImageFeatures.produce(new NativeImageFeatureBuildItem(DarwinAwtFeature.class));
}

@BuildStep(onlyIf = NativeBuild.class)
UnsupportedOSBuildItem osSupportCheck() {
return new UnsupportedOSBuildItem(WINDOWS,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@
import org.graalvm.nativeimage.hosted.Feature;
import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport;

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

/**
* Note that this initialization s not enough if user wants to deserialize actual images
* (e.g. from XML). AWT Extension must be loaded for decoding JDK supported image formats.
*/
@AutomaticFeature
public class AwtFeature implements Feature {
@Override
public void afterRegistration(AfterRegistrationAccess access) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@
import org.graalvm.nativeimage.hosted.Feature;
import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport;

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

import io.quarkus.runtime.util.JavaVersionUtil;

@AutomaticFeature
@Platforms({ Platform.DARWIN_AMD64.class, Platform.DARWIN_AARCH64.class })
public class DarwinAwtFeature implements Feature {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;

import io.quarkus.caffeine.runtime.graal.CacheConstructorsFeature;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;

public class CaffeineProcessor {

Expand Down Expand Up @@ -41,4 +44,9 @@ void cacheLoaders(CombinedIndexBuildItem combinedIndex, BuildProducer<Reflective
}
}
}

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
NativeImageFeatureBuildItem nativeImageFeature() {
return new NativeImageFeatureBuildItem(CacheConstructorsFeature.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import org.graalvm.nativeimage.hosted.Feature;
import org.graalvm.nativeimage.hosted.RuntimeReflection;

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

/**
* This Automatic Feature for GraalVM will register for reflection
* the most commonly used cache implementations from Caffeine.
Expand All @@ -20,8 +18,7 @@
* Caffeine is indeed being used: only if the cache builder is reachable
* in the application code.
*/
@AutomaticFeature
public class CacheConstructorsAutofeature implements Feature {
public class CacheConstructorsFeature implements Feature {

private final AtomicBoolean triggered = new AtomicBoolean(false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
import io.quarkus.deployment.builditem.LiveReloadBuildItem;
import io.quarkus.deployment.builditem.LogCategoryBuildItem;
import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
import io.quarkus.deployment.builditem.RunTimeConfigurationDefaultBuildItem;
import io.quarkus.deployment.builditem.ServiceStartBuildItem;
import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
Expand Down Expand Up @@ -136,6 +137,7 @@
import io.quarkus.hibernate.orm.runtime.cdi.QuarkusArcBeanContainer;
import io.quarkus.hibernate.orm.runtime.devconsole.HibernateOrmDevConsoleCreateDDLSupplier;
import io.quarkus.hibernate.orm.runtime.devconsole.HibernateOrmDevConsoleIntegrator;
import io.quarkus.hibernate.orm.runtime.graal.DisableLoggingFeature;
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationStaticDescriptor;
import io.quarkus.hibernate.orm.runtime.migration.MultiTenancyStrategy;
import io.quarkus.hibernate.orm.runtime.proxies.PreGeneratedProxies;
Expand Down Expand Up @@ -170,6 +172,11 @@ public final class HibernateOrmProcessor {

private static final String INTEGRATOR_SERVICE_FILE = "META-INF/services/org.hibernate.integrator.spi.Integrator";

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
NativeImageFeatureBuildItem nativeImageFeature() {
return new NativeImageFeatureBuildItem(DisableLoggingFeature.class);
}

@BuildStep
void registerHibernateOrmMetadataForCoreDialects(
BuildProducer<DatabaseKindDialectBuildItem> producer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,10 @@

import org.graalvm.nativeimage.hosted.Feature;

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

/**
* Disables logging during the analysis phase
*/
@AutomaticFeature
public class DisableLoggingAutoFeature implements Feature {
public class DisableLoggingFeature implements Feature {

private static final String[] CATEGORIES = {
"org.hibernate.Version",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
import io.quarkus.deployment.builditem.NativeImageFeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.logging.LogCleanupFilterBuildItem;
import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
import io.quarkus.deployment.recording.RecorderContext;
import io.quarkus.elasticsearch.restclient.common.deployment.DevservicesElasticsearchBuildItem;
import io.quarkus.hibernate.orm.deployment.PersistenceUnitDescriptorBuildItem;
Expand All @@ -51,6 +53,7 @@
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchBuildTimeConfigPersistenceUnit.ElasticsearchIndexBuildTimeConfig;
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRecorder;
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.HibernateSearchElasticsearchRuntimeConfig;
import io.quarkus.hibernate.search.orm.elasticsearch.runtime.graal.DisableLoggingFeature;
import io.quarkus.runtime.configuration.ConfigurationException;

class HibernateSearchElasticsearchProcessor {
Expand All @@ -59,9 +62,14 @@ class HibernateSearchElasticsearchProcessor {

HibernateSearchElasticsearchBuildTimeConfig buildTimeConfig;

@BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
NativeImageFeatureBuildItem nativeImageFeature() {
return new NativeImageFeatureBuildItem(DisableLoggingFeature.class);
}

@BuildStep
void setupLogFilters(BuildProducer<LogCleanupFilterBuildItem> filters) {
// if the category changes, please also update DisableLoggingAutoFeature in the runtime module
// if the category changes, please also update DisableLoggingFeature in the runtime module
filters.produce(new LogCleanupFilterBuildItem(
"org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchPreIntegrationService", "HSEARCH000034"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,10 @@

import org.graalvm.nativeimage.hosted.Feature;

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

/**
* Disables logging during the analysis phase
*/
@AutomaticFeature
public class DisableLoggingAutoFeature implements Feature {
public class DisableLoggingFeature implements Feature {

private static final String[] CATEGORIES = {
"org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchPreIntegrationService"
Expand Down
Loading