diff --git a/spring-modulith-core/src/main/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerification.java b/spring-modulith-core/src/main/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerification.java
new file mode 100644
index 00000000..c658cd28
--- /dev/null
+++ b/spring-modulith-core/src/main/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerification.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2023 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.springframework.modulith.core.config;
+
+import java.util.Arrays;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.modulith.ApplicationModuleInitializer;
+import org.springframework.util.ClassUtils;
+
+/**
+ * A {@link BeanFactoryPostProcessor} verifying that the {@code spring-modulith-runtime} artifact is on the classpath in
+ * case any beans implementing {@link ApplicationModuleInitializer} are found in the
+ * {@code org.springframework.context.ApplicationContext}.
+ *
+ * @author Oliver Drotbohm
+ * @since 1.1
+ */
+@AutoConfiguration
+class ApplicationModuleInitializerRuntimeVerification implements BeanFactoryPostProcessor {
+
+ private static final String ARTIFACT_MISSING = "Detected bean(s) (%s) implementing ApplicationModuleInitializer but Spring Modulith Runtime artifact not on the classpath! Please add org.springframework.modulith:spring-modulith-runtime to your project!";
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
+ */
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+
+ var initializerBeanNames = beanFactory.getBeanNamesForType(ApplicationModuleInitializer.class);
+
+ if (initializerBeanNames.length == 0) {
+ return;
+ }
+
+ if (!ClassUtils.isPresent("org.springframework.modulith.runtime.ApplicationRuntime", getClass().getClassLoader())) {
+ throw new IllegalStateException(ARTIFACT_MISSING.formatted(Arrays.toString(initializerBeanNames)));
+ }
+ }
+}
diff --git a/spring-modulith-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-modulith-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 00000000..64a59578
--- /dev/null
+++ b/spring-modulith-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+org.springframework.modulith.core.config.ApplicationModuleInitializerRuntimeVerification
diff --git a/spring-modulith-core/src/test/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerificationTests.java b/spring-modulith-core/src/test/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerificationTests.java
new file mode 100644
index 00000000..9974e944
--- /dev/null
+++ b/spring-modulith-core/src/test/java/org/springframework/modulith/core/config/ApplicationModuleInitializerRuntimeVerificationTests.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2023 the original author or authors.
+ *
+ * Licensed 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
+ *
+ * https://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.springframework.modulith.core.config;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.modulith.ApplicationModuleInitializer;
+
+/**
+ * Tests for {@link ApplicationModuleInitializerRuntimeVerification}.
+ *
+ * @author Oliver Drotbohm
+ * @since 1.1
+ */
+class ApplicationModuleInitializerRuntimeVerificationTests {
+
+ @Test // GH-348
+ void startsWithoutApplicationModuleInititalizersPresent() {
+
+ new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(ApplicationModuleInitializerRuntimeVerification.class))
+ .run(ctx -> {
+ assertThat(ctx).hasNotFailed();
+ });
+ }
+
+ @Test // GH-348
+ void rejectsPresenceOfAppliactionModuleInitializerBeanIfRuntimeArtifactIsMissing() {
+
+ new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(ApplicationModuleInitializerRuntimeVerification.class))
+ .withBean(ApplicationModuleInitializer.class, () -> mock(ApplicationModuleInitializer.class))
+ .run(ctx -> {
+
+ assertThat(ctx)
+ .hasFailed()
+ .getFailure()
+ .isInstanceOf(IllegalStateException.class)
+ .hasMessageContaining("ApplicationModuleInitializer") // Type
+ .hasMessageContaining("applicationModuleInitializer") // Bean name
+ .hasMessageContaining("spring-modulith-runtime"); // Missing artifact
+ });
+ }
+}
diff --git a/spring-modulith-starters/spring-modulith-starter-core/pom.xml b/spring-modulith-starters/spring-modulith-starter-core/pom.xml
index 048c0c95..1b47c17b 100644
--- a/spring-modulith-starters/spring-modulith-starter-core/pom.xml
+++ b/spring-modulith-starters/spring-modulith-starter-core/pom.xml
@@ -37,13 +37,6 @@
1.1.0-SNAPSHOT
-
- org.springframework.modulith
- spring-modulith-runtime
- 1.1.0-SNAPSHOT
- runtime
-
-
org.springframework.boot
spring-boot-starter