diff --git a/integrationtest/src/test/java/org/mapstruct/itest/tests/MavenIntegrationTest.java b/integrationtest/src/test/java/org/mapstruct/itest/tests/MavenIntegrationTest.java
index e82f13a01..2ec0ba9aa 100644
--- a/integrationtest/src/test/java/org/mapstruct/itest/tests/MavenIntegrationTest.java
+++ b/integrationtest/src/test/java/org/mapstruct/itest/tests/MavenIntegrationTest.java
@@ -109,6 +109,13 @@ public class MavenIntegrationTest {
void recordsTest() {
}
+ @ProcessorTest(baseDir = "recordsCrossModuleTest", processorTypes = {
+ ProcessorTest.ProcessorType.JAVAC
+ })
+ @EnabledForJreRange(min = JRE.JAVA_17)
+ void recordsCrossModuleTest() {
+ }
+
@ProcessorTest(baseDir = "kotlinDataTest", processorTypes = {
ProcessorTest.ProcessorType.JAVAC
}, forkJvm = true)
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/api/pom.xml b/integrationtest/src/test/resources/recordsCrossModuleTest/api/pom.xml
new file mode 100644
index 000000000..362f2d384
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/api/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ 4.0.0
+
+
+ recordsCrossModuleTest
+ org.mapstruct
+ 1.0.0
+
+
+ records-cross-module-api
+
+
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/api/src/main/java/org/mapstruct/itest/records/api/CustomerDto.java b/integrationtest/src/test/resources/recordsCrossModuleTest/api/src/main/java/org/mapstruct/itest/records/api/CustomerDto.java
new file mode 100644
index 000000000..344aa79d9
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/api/src/main/java/org/mapstruct/itest/records/api/CustomerDto.java
@@ -0,0 +1,13 @@
+/*
+ * Copyright MapStruct Authors.
+ *
+ * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
+ */
+package org.mapstruct.itest.records.api;
+
+/**
+ * @author Filip Hrisafov
+ */
+public record CustomerDto(String name, String email) {
+
+}
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/pom.xml b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/pom.xml
new file mode 100644
index 000000000..6fc250ed4
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ 4.0.0
+
+
+ recordsCrossModuleTest
+ org.mapstruct
+ 1.0.0
+
+
+ records-cross-module-mapper
+
+
+
+
+ org.mapstruct
+ records-cross-module-api
+ 1.0.0
+
+
+
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerEntity.java b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerEntity.java
new file mode 100644
index 000000000..51bcdaa8e
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerEntity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright MapStruct Authors.
+ *
+ * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
+ */
+package org.mapstruct.itest.records.mapper;
+
+/**
+ * @author Filip Hrisafov
+ */
+public class CustomerEntity {
+
+ private String name;
+ private String mail;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getMail() {
+ return mail;
+ }
+
+ public void setMail(String mail) {
+ this.mail = mail;
+ }
+}
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerMapper.java b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerMapper.java
new file mode 100644
index 000000000..7b679a424
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/src/main/java/org/mapstruct/itest/records/mapper/CustomerMapper.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright MapStruct Authors.
+ *
+ * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
+ */
+package org.mapstruct.itest.records.mapper;
+
+import org.mapstruct.InheritInverseConfiguration;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+import org.mapstruct.itest.records.api.CustomerDto;
+
+/**
+ * @author Filip Hrisafov
+ */
+@Mapper
+public interface CustomerMapper {
+
+ CustomerMapper INSTANCE = Mappers.getMapper( CustomerMapper.class );
+
+ @Mapping(target = "mail", source = "email")
+ CustomerEntity fromRecord(CustomerDto record);
+
+ @InheritInverseConfiguration
+ CustomerDto toRecord(CustomerEntity entity);
+
+}
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/test/java/org/mapstruct/itest/records/mapper/RecordsTest.java b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/test/java/org/mapstruct/itest/records/mapper/RecordsTest.java
new file mode 100644
index 000000000..2f274792b
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/mapper/test/java/org/mapstruct/itest/records/mapper/RecordsTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright MapStruct Authors.
+ *
+ * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
+ */
+package org.mapstruct.itest.records.mapper;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+import org.mapstruct.itest.records.api.CustomerDto;
+import org.mapstruct.itest.records.mapper.CustomerEntity;
+import org.mapstruct.itest.records.mapper.CustomerMapper;
+
+public class RecordsTest {
+
+ @Test
+ public void shouldMapRecord() {
+ CustomerEntity customer = CustomerMapper.INSTANCE.fromRecord( new CustomerDto( "Kermit", "kermit@test.com" ) );
+
+ assertThat( customer ).isNotNull();
+ assertThat( customer.getName() ).isEqualTo( "Kermit" );
+ assertThat( customer.getMail() ).isEqualTo( "kermit@test.com" );
+ }
+
+ @Test
+ public void shouldMapIntoRecord() {
+ CustomerEntity entity = new CustomerEntity();
+ entity.setName( "Kermit" );
+ entity.setMail( "kermit@test.com" );
+
+ CustomerDto customer = CustomerMapper.INSTANCE.toRecord( entity );
+
+ assertThat( customer ).isNotNull();
+ assertThat( customer.name() ).isEqualTo( "Kermit" );
+ assertThat( customer.email() ).isEqualTo( "kermit@test.com" );
+ }
+
+}
diff --git a/integrationtest/src/test/resources/recordsCrossModuleTest/pom.xml b/integrationtest/src/test/resources/recordsCrossModuleTest/pom.xml
new file mode 100644
index 000000000..47c55ea41
--- /dev/null
+++ b/integrationtest/src/test/resources/recordsCrossModuleTest/pom.xml
@@ -0,0 +1,26 @@
+
+
+
+ 4.0.0
+
+
+ org.mapstruct
+ mapstruct-it-parent
+ 1.0.0
+ ../pom.xml
+
+
+ recordsCrossModuleTest
+ pom
+
+
+ api
+ mapper
+
+