본문으로 건너뛰기
ElastiCORE 3.0 은 릴리스 후보(RC)입니다: Maven Central 의 3.0.261022-rc1. 2.2 라인 프로젝트는 2.2 문서를 보세요.
버전: 3.0

문제 해결과 체크리스트

먼저: 규칙이 도는가​

./gradlew elcore3 -PlistRules

첫 줄에 룰셋이 보이고([rules] petstore: hexagonal-springboot + … + com.example.rules.PetstoreRules), 우리 규칙 id 가 의도한 target 아래 보이면 연결된 것입니다. 안 보이면 연결 문제, 보이는데 결과가 없으면 target·파일 소유 문제입니다.

증상별​

증상원인해결
Rule set class '…' is not on the generator's classpathrules 의 클래스 이름 오타, 또는 elasticore project(':ps-rules')(jar 면 좌표) 누락이름과 의존성 확인
생성 중 NoSuchMethodError, AbstractMethodError규칙 모듈의 elasticore-base 버전이 플러그인 버전과 다름두 버전을 같게 (첫 룰셋)
Rule set '…' cannot be used: it must be a public class implementing CodeRules with a public no-argument constructor룰셋 클래스가 public 이 아니거나 인자 없는 생성자가 없음public class … 와 기본 생성자
… a class it uses is not on the generator's classpath; add it to the rules module's dependencies.규칙이 쓰는 라이브러리가 규칙 모듈에 compileOnly 로만 있음그 라이브러리를 implementation 으로
규칙이 도는데 결과가 없다target 이 다름, 또는 그 파일에 어노테이션을 그리는 자리가 없음대상 파일, 테스트에서 render() 를 출력
필드 규칙이 안 불린다메서드 모양이 (EntitySpec, FieldSpec) 이 아님, 또는 도메인 파일인데 (EntitySpec)API 레퍼런스
merge 대신 ensure 를 썼더니 아무 일도 없다같은 어노테이션이 이미 있음 (@Schema 등)속성을 더하려면 merge
내 파일(PurchaseOrder.java, 컨트롤러)에 반영이 안 된다개발자 파일 - 처음 한 번만 생성생성 로그의 알림대로 직접 붙이기 (대상 파일)
생성 로그에 SKIP(user-modified; -Pforce to overwrite)생성기 파일을 손으로 고침고친 것을 규칙으로 옮기고 -Pforce
생성 로그에 SKIP(user-owned)개발자 파일정상 - 직접 고치기
새 파일에 빈 줄만 있고 값이 없다채우지 않은 ${빈칸} - 오류가 아니라 빈 줄이 됨테스트에서 unfilledSlots() (대개 이름 오타)
새 파일이 Kotlin 프로젝트에서 ERRORkt/<target>.tmpl 이 없음 - Java 로 떨어지지 않음새 파일 만들기
env.yml 에 rules: 를 쓰니 헥사고날 파일이 사라졌다publisher.rules 는 번들을 대체빌드의 rules = [...] 를 쓰거나 번들 이름도 적기
우리 DSL 단어를 틀리게 써도(@pi) 조용하다모르는 단어는 오류가 아니라 보관만 됨중요한 단어는 검사 규칙을 두기 (DSL 단어와 모델 검사)
규칙에서 예외가 나서 한 파일만 ERROR규칙이 예외를 던짐모델 문제는 ModelCheck.fail 로
TypeScript 클라이언트(elcore3ts)에 우리 규칙이 없다의도된 동작 - 팀 규칙은 서버(Java·Kotlin) 생성에만TypeScript 용은 publisher.rules.ts 에 따로
규칙을 고쳤는데 결과가 그대로규칙 모듈이 다시 컴파일되지 않았거나(jar 버전 그대로), 손으로 고친 파일jar 면 버전을 올리고 --refresh-dependencies

새 규칙을 더할 때​

  • 규칙 id 가 팀 접두사로 시작한다 (ps-…) - 기본 규칙과 겹치지 않게
  • DSL 에 이미 있는 기능이 아니다 - 규칙을 지워 보고 결과가 그대로면 이미 있는 것
  • 팀 DSL 단어가 ElastiCORE 단어(@event, @search, @label …)와 겹치지 않는다
  • target 과 메서드 모양이 맞다
  • 어노테이션을 문자열로 이어 붙이지 않았다 (AnnoCode)
  • 예외를 던지지 않는다 (ModelCheck)
  • 새 파일이면: 조건이 안 맞을 때 빈 목록, orNamespace, v3/·kt/ 스켈레톤, requireSyntaxAnyOf
  • 규칙 테스트가 있고 unfilledSlots() 가 비어 있다
  • 이미 있는 개발자 파일에 필요한 변경을 팀에 알렸다