7.6 KiB
title, source_type, url, archive_url, related_branches, related_projects, tags, created, status, confidence, last_reviewed
| title | source_type | url | archive_url | related_branches | related_projects | tags | created | status | confidence | last_reviewed | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| official-doc / MapStruct — @Generated Annotation, Processor Options, Java Module System (Stable Reference) | official-doc | https://mapstruct.org/documentation/stable/reference/html/ |
|
|
|
2026-05-28 | raw | high | 2026-05-28 |
official-doc / MapStruct — @Generated Annotation, Processor Options, Java Module System
Layer:
raw/official-docs/— MapStruct 공식 레퍼런스 문서 원문 발췌. 검증된 요약은/ingest후wiki/concepts/에 별도 작성. 원본은 raw에 영구 보관.
Parent / 활용 branch
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| raw/branch-notes/feature-architecture-enforcement-rules | D9: MapStruct generated mapper에 대한 ArchUnit exemption 근거 — MapStruct가 @Generated annotation을 붙인다는 공식 확인, 및 java.annotation.processing.Generated가 Java 9+ 모듈 시스템에서 활성화 가능하다는 공식 근거 |
출처 / Source
- 원본 URL: https://mapstruct.org/documentation/stable/reference/html/
- 아카이브 URL: (미등록 — 최초 캡처)
- 저자 / 조직: MapStruct Authors (mapstruct.org)
- 발행일: (stable reference — 버전별 갱신)
- 마지막 확인일: 2026-05-28
왜 저장했는지 / Why archived
feature-architecture-enforcement-rules의 D9가 UNSUPPORTED_DECISION 상태로, MapStruct generated code에 대한 ArchUnit exemption의 공식 근거가 없었다. MapStruct 공식 레퍼런스의 §2.4 Processor Options 표와 §2.5 Java Module System 절이 @Generated annotation 동작과 java.annotation.processing.Generated 활성화를 명시적으로 문서화하고 있으므로, D9의 exemption 패턴에 대한 공식 vendor-doc 근거로 보관한다.
핵심 인용 / Key quotes (verbatim)
[§2.5, line 1276] "To allow usage of the
@Generatedannotationjava.annotation.processing.Generated(part of thejava.compilermodule) can be enabled."
[§2.4 Table 1, line 1078] "If set to
true, the creation of a time stamp in the@Generatedannotation in the generated mapper classes is suppressed."
[§2.4 Table 1, line 1093] "If set to
true, the creation of thecommentattribute in the@Generatedannotation in the generated mapper classes is suppressed. The comment contains information about the version of MapStruct and about the compiler used for the annotation processing."
Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| MS-ANNOT-C1 | MapStruct generated mapper 클래스에는 @Generated annotation이 붙는다 |
[§2.4 Table 1, line 1078] "the creation of a time stamp in the @Generated annotation in the generated mapper classes" |
official-vendor-doc |
MapStruct annotation processor를 사용하는 모든 Java 프로젝트 | @Generated가 ArchUnit 규칙에서 자동으로 exemption 처리됨을 의미하지 않음. ArchUnit 규칙 측에서 명시 처리 필요 |
| MS-ANNOT-C2 | Java 9 이상에서 java.annotation.processing.Generated (java.compiler 모듈 소속)을 활성화하면 @Generated annotation 사용이 가능하다 |
[§2.5, line 1276] "To allow usage of the @Generated annotation java.annotation.processing.Generated (part of the java.compiler module) can be enabled." |
official-vendor-doc |
Java 9+ 모듈 시스템 사용 프로젝트 | java.compiler 모듈이 기본 활성화됨을 의미하지 않음. 빌드 설정에서 명시 추가 필요 여부는 빌드 도구와 환경에 따름 |
| MS-ANNOT-C3 | mapstruct.suppressGeneratorTimestamp=true 옵션으로 생성된 mapper의 @Generated annotation에서 타임스탬프를 제거할 수 있다 |
[§2.4 Table 1, line 1078] "If set to true, the creation of a time stamp in the @Generated annotation in the generated mapper classes is suppressed." |
official-vendor-doc |
MapStruct processor option 설정이 가능한 모든 빌드 환경 (Maven/Gradle) | 기본값은 false (타임스탬프 포함). ca-tmpl이 현재 이 옵션을 설정하는지는 별도 확인 필요 |
| MS-ANNOT-C4 | mapstruct.suppressGeneratorVersionInfoComment=true 옵션으로 @Generated annotation의 comment attribute (MapStruct 버전 + 컴파일러 정보)를 제거할 수 있다 |
[§2.4 Table 1, line 1093] "If set to true, the creation of the comment attribute in the @Generated annotation in the generated mapper classes is suppressed. The comment contains information about the version of MapStruct and about the compiler used for the annotation processing." |
official-vendor-doc |
MapStruct processor option 설정이 가능한 모든 빌드 환경 | 기본값은 false (version info 포함). D9 exemption 로직과 직접적 연관은 없으나 build reproducibility에 영향 |
Strength 허용값 참고
사용한 Strength: official-vendor-doc — MapStruct 공식 vendor 문서.
Usage Boundaries / 적용 경계
- 이 자료가 직접 증명하는 것:
MS-ANNOT-C1: MapStruct가 generated mapper에@Generatedannotation을 부착한다는 것 (타임스탬프 suppress 옵션 문서에서 직접 확인됨)MS-ANNOT-C2: Java 9 이상에서java.annotation.processing.Generatedannotation 사용이 MapStruct에 의해 지원된다는 것MS-ANNOT-C3:mapstruct.suppressGeneratorTimestampprocessor option의 동작MS-ANNOT-C4:mapstruct.suppressGeneratorVersionInfoCommentprocessor option의 동작
- 이 자료가 증명하지 않는 것:
- ArchUnit에서
@Generatedannotation 보유 클래스를 자동 제외하는 방법 — ArchUnit 측 DSL/predicate 구현은 ArchUnit 공식 문서 참조 필요 - ca-tmpl 프로젝트의 실제 generated source path가 어디인지 — 빌드 설정 확인 필요
java.compiler모듈이 ca-tmpl 빌드에서 현재 활성화되어 있는지
- ArchUnit에서
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
- ca-tmpl의 MapStruct annotation processor가 실제로 어떤
@Generatedannotation 클래스를 사용하는지 (javax.annotation.Generatedvsjava.annotation.processing.Generated) — Java 버전에 따라 다름 - ArchUnit의
.that(have(simpleNameStartingWith("..."))또는.that(areAnnotatedWith(Generated.class))predicate가 실제로 generated mapper를 식별하는지 ca-tmpl 테스트에서 검증 필요 - 두 annotation 클래스 중 어느 것이 ArchUnit
haveSimpleName/areAnnotatedWith조건에 매칭되는지
- ca-tmpl의 MapStruct annotation processor가 실제로 어떤
메모 / Notes
- MapStruct가
@Generated를 붙인다는 사실은 §2.4 Table 1의suppressGeneratorTimestamp옵션 설명에서 간접적으로 확인된다 (타임스탬프를 suppress하는 옵션이 있다는 것은 기본값으로 타임스탬프가 포함된@Generated가 생성됨을 전제). - §2.5는 매우 짧은 절로, Java 모듈 시스템 지원에 대한 상세 설명 없이
java.compiler모듈 활성화만 언급한다. 상세 module-info.java 설정은 별도 확인 필요. - 추가로 봐야 할 동일 출처 페이지: MapStruct reference의 "Using MapStruct with Java 9" 또는 module-info.java 설정 예제 (stable 레퍼런스 내 다른 절 또는 migration guide).
Related / 관련
- 같은 주제 ArchUnit 공식 문서: raw/official-docs/archunit-user-guide
- 같은 주제 ArchUnit governance: raw/official-docs/governance-archunit-official
- 이 자료를 인용한 branch-note: raw/branch-notes/feature-architecture-enforcement-rules