This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 6ff9367 Introduce a build time optimized FastComponentNameResolver 6ff9367 is described below commit 6ff936771ed44d65888eb6a51cd02ae530bc7f18 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Thu Jul 29 15:21:23 2021 +0100 Introduce a build time optimized FastComponentNameResolver Fixes #892 --- .../core/deployment/CamelContextProcessor.java | 3 + .../quarkus/core/deployment/CamelProcessor.java | 21 ++++ .../spi/CamelComponentNameResolverBuildItem.java | 37 ++++++ .../camel/quarkus/core/CamelContextRecorder.java | 3 + .../apache/camel/quarkus/core/CamelRecorder.java | 4 + .../camel/quarkus/core/FastCamelContext.java | 7 ++ .../quarkus/core/FastComponentNameResolver.java | 40 ++++++ .../foundation/component-name-resolver/pom.xml | 134 +++++++++++++++++++++ .../resolver/ComponentNameResolverResource.java | 54 +++++++++ .../name/resolver/ComponentNameResolverIT.java | 23 ++++ .../name/resolver/ComponentNameResolverTest.java | 52 ++++++++ integration-test-groups/foundation/pom.xml | 1 + 12 files changed, 379 insertions(+) diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java index eff1b4b..e5b3add 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java @@ -30,6 +30,7 @@ import org.apache.camel.quarkus.core.CamelConfig; import org.apache.camel.quarkus.core.CamelContextRecorder; import org.apache.camel.quarkus.core.CamelRuntime; import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainEnabled; +import org.apache.camel.quarkus.core.deployment.spi.CamelComponentNameResolverBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelContextBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem; @@ -74,6 +75,7 @@ public class CamelContextProcessor { CamelFactoryFinderResolverBuildItem factoryFinderResolver, List<CamelContextCustomizerBuildItem> customizers, CamelStartupStepRecorderBuildItem startupStepRecorder, + CamelComponentNameResolverBuildItem componentNameResolver, CamelConfig config) { RuntimeValue<CamelContext> context = recorder.createContext( @@ -83,6 +85,7 @@ public class CamelContextProcessor { modelDumper.getValue(), factoryFinderResolver.getFactoryFinderResolver(), startupStepRecorder.getValue(), + componentNameResolver.getComponentNameResolver(), beanContainer.getValue(), CamelSupport.getCamelVersion(), config); diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java index 839e9c6..a333305 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java @@ -24,6 +24,7 @@ import java.nio.file.Path; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.TreeSet; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -50,6 +51,11 @@ import org.apache.camel.quarkus.core.CamelConfigFlags; import org.apache.camel.quarkus.core.CamelProducers; import org.apache.camel.quarkus.core.CamelRecorder; import org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder; +import org.apache.camel.quarkus.core.deployment.catalog.BuildTimeCamelCatalog; +import org.apache.camel.quarkus.core.deployment.catalog.BuildTimeJsonSchemaResolver; +import org.apache.camel.quarkus.core.deployment.catalog.SchemaResource; +import org.apache.camel.quarkus.core.deployment.spi.BuildTimeCamelCatalogBuildItem; +import org.apache.camel.quarkus.core.deployment.spi.CamelComponentNameResolverBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelModelToXMLDumperBuildItem; @@ -378,6 +384,21 @@ class CamelProcessor { .collect(Collectors.toList()); } + @Record(ExecutionTime.STATIC_INIT) + @BuildStep + CamelComponentNameResolverBuildItem componentNameResolver( + BuildTimeCamelCatalogBuildItem camelCatalog, + CamelRecorder recorder) { + BuildTimeCamelCatalog catalog = camelCatalog.getCatalog(); + BuildTimeJsonSchemaResolver jSonSchemaResolver = catalog.getJSonSchemaResolver(); + Set<String> componentNames = jSonSchemaResolver.getSchemaResources() + .stream() + .filter(resource -> resource.getType().equals("component")) + .map(SchemaResource::getName) + .collect(Collectors.collectingAndThen(Collectors.toUnmodifiableSet(), TreeSet::new)); + return new CamelComponentNameResolverBuildItem(recorder.createComponentNameResolver(componentNames)); + } + @BuildStep NativeImageResourceBuildItem initResources() { return new NativeImageResourceBuildItem( diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelComponentNameResolverBuildItem.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelComponentNameResolverBuildItem.java new file mode 100644 index 0000000..b1b102a --- /dev/null +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelComponentNameResolverBuildItem.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core.deployment.spi; + +import io.quarkus.builder.item.SimpleBuildItem; +import io.quarkus.runtime.RuntimeValue; +import org.apache.camel.spi.ComponentNameResolver; + +/** + * Holds the {@link ComponentNameResolver} {@link RuntimeValue}. + */ +public final class CamelComponentNameResolverBuildItem extends SimpleBuildItem { + + private final RuntimeValue<ComponentNameResolver> value; + + public CamelComponentNameResolverBuildItem(RuntimeValue<ComponentNameResolver> value) { + this.value = value; + } + + public RuntimeValue<ComponentNameResolver> getComponentNameResolver() { + return value; + } +} diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java index eed98af..25deef0 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java @@ -26,6 +26,7 @@ import org.apache.camel.builder.LambdaRouteBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.catalog.RuntimeCamelCatalog; import org.apache.camel.spi.CamelContextCustomizer; +import org.apache.camel.spi.ComponentNameResolver; import org.apache.camel.spi.FactoryFinderResolver; import org.apache.camel.spi.ModelJAXBContextFactory; import org.apache.camel.spi.ModelToXMLDumper; @@ -42,6 +43,7 @@ public class CamelContextRecorder { RuntimeValue<ModelToXMLDumper> xmlModelDumper, RuntimeValue<FactoryFinderResolver> factoryFinderResolver, RuntimeValue<StartupStepRecorder> startupStepRecorder, + RuntimeValue<ComponentNameResolver> componentNameResolver, BeanContainer beanContainer, String version, CamelConfig config) { @@ -63,6 +65,7 @@ public class CamelContextRecorder { context.build(); context.addLifecycleStrategy(new CamelLifecycleEventBridge()); context.getManagementStrategy().addEventNotifier(new CamelManagementEventBridge()); + context.setComponentNameResolver(componentNameResolver.getValue()); // register to the container beanContainer.instance(CamelProducers.class).setContext(context); diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java index 289e108..9393efd 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java @@ -34,6 +34,7 @@ import org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder; import org.apache.camel.reifier.ProcessorReifier; import org.apache.camel.reifier.validator.ValidatorReifier; import org.apache.camel.spi.BeanProxyFactory; +import org.apache.camel.spi.ComponentNameResolver; import org.apache.camel.spi.FactoryFinderResolver; import org.apache.camel.spi.ModelJAXBContextFactory; import org.apache.camel.spi.ModelToXMLDumper; @@ -185,4 +186,7 @@ public class CamelRecorder { }; } + public RuntimeValue<ComponentNameResolver> createComponentNameResolver(Set<String> componentNames) { + return new RuntimeValue<>(new FastComponentNameResolver(componentNames)); + } } diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java index 333d3ae..4914be7 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java @@ -32,6 +32,7 @@ import org.apache.camel.impl.engine.DefaultLanguageResolver; import org.apache.camel.model.ModelCamelContext; import org.apache.camel.spi.CamelBeanPostProcessor; import org.apache.camel.spi.ClassResolver; +import org.apache.camel.spi.ComponentNameResolver; import org.apache.camel.spi.ComponentResolver; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.FactoryFinderResolver; @@ -100,6 +101,12 @@ public class FastCamelContext extends DefaultCamelContext implements CatalogCame } @Override + protected ComponentNameResolver createComponentNameResolver() { + // Component names are discovered at build time + throw new UnsupportedOperationException(); + } + + @Override protected TypeConverter createTypeConverter() { // TypeConverter impls are resolved at build time throw new UnsupportedOperationException(); diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastComponentNameResolver.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastComponentNameResolver.java new file mode 100644 index 0000000..cf73b19 --- /dev/null +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastComponentNameResolver.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core; + +import java.util.Set; + +import org.apache.camel.CamelContext; +import org.apache.camel.spi.ComponentNameResolver; + +/** + * A fast {@link ComponentNameResolver} implementation, returning a fixed set of component names that were + * discovered at build time + */ +public class FastComponentNameResolver implements ComponentNameResolver { + + private final Set<String> componentNames; + + public FastComponentNameResolver(Set<String> componentNames) { + this.componentNames = componentNames; + } + + @Override + public Set<String> resolveNames(CamelContext camelContext) { + return componentNames; + } +} diff --git a/integration-test-groups/foundation/component-name-resolver/pom.xml b/integration-test-groups/foundation/component-name-resolver/pom.xml new file mode 100644 index 0000000..5fcd5e7 --- /dev/null +++ b/integration-test-groups/foundation/component-name-resolver/pom.xml @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-integration-tests-foundation</artifactId> + <version>2.2.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>camel-quarkus-integration-test-component-name-resolver</artifactId> + <name>Camel Quarkus :: Integration Tests :: Component Name Resolver :: Tests</name> + + <dependencies> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-log</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-mock</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy</artifactId> + </dependency> + + <!-- test dependencies --> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-junit5</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>io.rest-assured</groupId> + <artifactId>rest-assured</artifactId> + <scope>test</scope> + </dependency> + + <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory --> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-log-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-mock-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> + </dependencies> + + <profiles> + <profile> + <id>native</id> + <activation> + <property> + <name>native</name> + </property> + </activation> + <properties> + <quarkus.package.type>native</quarkus.package.type> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> + +</project> diff --git a/integration-test-groups/foundation/component-name-resolver/src/main/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverResource.java b/integration-test-groups/foundation/component-name-resolver/src/main/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverResource.java new file mode 100644 index 0000000..cf226ba --- /dev/null +++ b/integration-test-groups/foundation/component-name-resolver/src/main/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverResource.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core.component.name.resolver; + +import java.util.stream.Collectors; + +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.apache.camel.CamelContext; +import org.apache.camel.ExtendedCamelContext; +import org.apache.camel.spi.ComponentNameResolver; + +@Path("/component-name-resolver") +public class ComponentNameResolverResource { + + @Inject + CamelContext context; + + @Path("/class") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String configuredComponentNameResolverClass() { + ComponentNameResolver resolver = context.getExtension(ExtendedCamelContext.class).getComponentNameResolver(); + return resolver.getClass().getName(); + } + + @Path("/resolve") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String fastResolveComponentNames() { + ComponentNameResolver resolver = context.getExtension(ExtendedCamelContext.class).getComponentNameResolver(); + return resolver.resolveNames(context) + .stream() + .collect(Collectors.joining(",")); + } +} diff --git a/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverIT.java b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverIT.java new file mode 100644 index 0000000..5bd3f3d --- /dev/null +++ b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverIT.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core.component.name.resolver; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class ComponentNameResolverIT extends ComponentNameResolverTest { +} diff --git a/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java new file mode 100644 index 0000000..6402d14 --- /dev/null +++ b/integration-test-groups/foundation/component-name-resolver/src/test/java/org/apache/camel/quarkus/core/component/name/resolver/ComponentNameResolverTest.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.core.component.name.resolver; + +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import org.apache.camel.quarkus.core.FastComponentNameResolver; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@QuarkusTest +public class ComponentNameResolverTest { + + @Test + public void fastComponentNameResolverConfigured() { + RestAssured.get("/component-name-resolver/class") + .then() + .statusCode(200) + .body(is(FastComponentNameResolver.class.getName())); + } + + @Test + public void resolveComponentNames() { + String componentNames = RestAssured.get("/component-name-resolver/resolve") + .then() + .statusCode(200) + .extract() + .body() + .asString(); + + assertTrue(componentNames.contains("direct")); + assertTrue(componentNames.contains("log")); + assertTrue(componentNames.contains("mock")); + } +} diff --git a/integration-test-groups/foundation/pom.xml b/integration-test-groups/foundation/pom.xml index 335c72e..13420c8 100644 --- a/integration-test-groups/foundation/pom.xml +++ b/integration-test-groups/foundation/pom.xml @@ -35,6 +35,7 @@ <!-- extensions a..z; do not remove this comment, it is important when sorting via mvn process-resources -Pformat --> <module>bean</module> <module>browse</module> + <module>component-name-resolver</module> <module>controlbus</module> <module>core</module> <module>core-annotations</module>