GH-846 - Fix module identifier lookup for jMolecules @Module(id = …).

We now properly translate jMolecules' @Module declaration configuring the id attribute explicitly into the identifier used for an application module.

Introduce @ApplicationModule(id = …) for Spring Modulith-native identifier customization.
This commit is contained in:
Oliver Drotbohm
2024-10-13 16:33:37 +02:00
parent de4668319c
commit 413e2f50b6
9 changed files with 233 additions and 36 deletions

View File

@@ -0,0 +1,24 @@
/*
* Copyright 2024 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 example;
/**
*
* @author Oliver Drotbohm
*/
public class Example {
}

View File

@@ -1,2 +1,2 @@
@org.jmolecules.ddd.annotation.Module
@org.jmolecules.ddd.annotation.Module(id = "customId")
package example.jmolecules;

View File

@@ -1,2 +1,2 @@
@org.springframework.modulith.ApplicationModule
@org.springframework.modulith.ApplicationModule(id = "secondCustomized")
package example.ni.nested.b.second;

View File

@@ -0,0 +1,45 @@
/*
* Copyright 2024 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;
import static org.assertj.core.api.Assertions.*;
import example.Example;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link ApplicationModuleSource}.
*
* @author Oliver Drotbohm
* @since 1.3
*/
class ApplicationModuleSourceUnitTests {
@Test // GH-846
void detectsSources() {
var rootPackage = TestUtils.getPackage(Example.class);
var detectionStrategy = ApplicationModuleDetectionStrategy.directSubPackage();
var sources = ApplicationModuleSource.from(rootPackage, detectionStrategy, false);
assertThat(sources)
.extracting(ApplicationModuleSource::getIdentifier)
.extracting(ApplicationModuleIdentifier::toString)
.contains("ninvalid", "customId", "invalid", "ni", "ni.nested.b.first", "secondCustomized", "ni.nested");
}
}

View File

@@ -36,11 +36,11 @@ class ApplicationModulesUnitTests {
.extracting(Object::toString)
.containsExactlyInAnyOrder(
"invalid",
"jmolecules",
"customId",
"ni",
"ni.nested",
"ni.nested.b.first",
"ni.nested.b.second",
"secondCustomized",
"springbean");
}
@@ -63,7 +63,7 @@ class ApplicationModulesUnitTests {
assertThat(ni.getNestedModules(modules))
.extracting(ApplicationModule::getIdentifier)
.extracting(Object::toString)
.containsExactlyInAnyOrder("ni.nested", "ni.nested.b.first", "ni.nested.b.second");
.containsExactlyInAnyOrder("ni.nested", "ni.nested.b.first", "secondCustomized");
}
@Test // GH 578