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

배포와 공유

프로젝트 하나에서는 규칙 모듈을 elasticore project(':ps-rules') 로 연결했습니다. 팀의 여러 프로젝트가 같은 규칙을 쓰려면 규칙 모듈을 jar 로 배포하고 좌표로 받습니다. elasticore 는 평범한 Gradle 구성이라 프로젝트 의존과 같은 방식입니다.

1. 규칙 모듈을 배포하기​

ps-rules/build.gradle
plugins {
id 'java-library'
id 'maven-publish'
}

group = 'com.example'
version = '1.0.0'

// ... dependencies 는 그대로 (compileOnly elasticore-base)

publishing {
publications {
rules(MavenPublication) {
from components.java
}
}
// 회사 저장소 (Nexus, Artifactory, GitHub Packages ...)
repositories {
maven {
url = 'https://nexus.example.com/repository/maven-releases/'
credentials {
username = findProperty('nexusUser') // ~/.gradle/gradle.properties - 저장소에 두지 않음
password = findProperty('nexusPassword')
}
}
}
}
./gradlew :ps-rules:publish                 # 회사 저장소로
./gradlew :ps-rules:publishToMavenLocal # 내 PC 의 ~/.m2 로 (시험용)

스켈레톤(src/main/resources/elasticore-template/…)은 jar 안에 함께 들어갑니다.

2. 다른 프로젝트에서 쓰기​

build.gradle
repositories {
maven { url = 'https://nexus.example.com/repository/maven-public/' } // 룰셋이 있는 저장소
mavenCentral()
}

elasticore {
architecture = 'hexagonal'
language = 'java'
rules = ['com.example.rules.PetstoreRules']
}

dependencies {
elasticore 'com.example:ps-rules:1.0.0' // 생성기 클래스패스 - 애플리케이션에는 안 들어감
implementation 'org.jmolecules:jmolecules-ddd:1.10.0'
}

elasticore 구성은 프로젝트의 repositories 에서 찾습니다. 펫스토어 사본에서 publishToMavenLocal 한 jar 를 이렇게 받았을 때 -PlistRules 와 생성 결과가 모듈로 연결했을 때와 같았습니다(PetstoreEventTopics 생성 포함). mavenLocal() 을 저장소에 적지 않으면 이렇게 실패합니다:

> Could not resolve all files for configuration ':elasticore'.
> Could not find com.example:ps-rules:1.0.0.

mavenLocal() 은 시험할 때만, 그리고 그 그룹만 보게 하세요:

repositories {
mavenLocal { content { includeGroup 'com.example' } }
mavenCentral()
}

버전 맞추기​

무엇규칙
규칙 모듈의 elasticore-base (compileOnly)쓰는 프로젝트들의 플러그인 버전과 같게
룰셋 jar 버전규칙을 바꿀 때마다 올리기. 같은 버전을 다시 배포하면 프로젝트들이 캐시를 계속 씀 (--refresh-dependencies)
ElastiCORE 를 올릴 때룰셋을 새 버전으로 다시 빌드·테스트하고 새 버전으로 배포 - 규칙 테스트가 이때 값을 합니다

규칙 모듈을 ElastiCORE 의 이전 버전으로 컴파일하고 새 생성기에서 돌리면, 바뀐 API 에서 생성 중 NoSuchMethodError 가 날 수 있습니다. ElastiCORE 를 올리는 PR 에 룰셋 버전도 함께 올리세요.

일부 도메인에만​

빌드의 rules = [...] 는 모든 도메인에 적용됩니다. 한 도메인에만 쓰려면 그 도메인의 env.yml 에 적습니다 - 이때는 번들을 대체하므로 번들 이름도 적습니다:

blueprint/petstore/env.yml
elasticore:
config:
publisher:
rules: [hexagonal-springboot, ossie-export, com.example.rules.PetstoreRules]

펫스토어 사본에서 빌드의 rules 를 지우고 이렇게 적었을 때 -PlistRules 첫 줄은 [rules] petstore: hexagonal-springboot + ossie-export + com.example.rules.PetstoreRules 였고 생성 결과도 같았습니다. elasticore '…' 의존(룰셋 jar)은 여전히 빌드에 있어야 합니다 - 생성기가 클래스를 찾는 곳이기 때문입니다.

팀에 공유할 것​

  • 룰셋 README: 규칙 id 목록, 각 규칙이 읽는 DSL 단어, env.yml 설정 키, 애플리케이션에 필요한 의존(jmolecules-ddd 등)
  • 규칙을 더하거나 바꿨을 때 이미 있는 개발자 파일(나뉜 루트의 클래스, 컨트롤러)에 직접 해야 하는 일 - 생성기가 알려 주는 것은 나뉜 루트 클래스의 클래스 어노테이션뿐입니다
  • -PlistRules 출력 - 리뷰어가 "어느 파일에 무엇이 붙나" 를 한 번에 봅니다