Skrull Maven 명령어
여기에서는 Maven에 대한 기본 지식이 있다는 가정하에 설명드립니다.
Skrull은 Maven Plugin으로 배포됩니다.
Skrull에는 다음 두 가지 Maven plugin이 있습니다.
1. dbmetadata-maven-plugin
데이터베이스로부터 각 테이블들에 대한 metadata 정보를 수집해서, metadata.xml 파일에 저장합니다.
Plugin Detail
name: com.unvus.skrull:dbmetadata-maven-plugin
goal: extract-metadata
maven phase: generate-sources
다음과 같은 명령으로 플러그인을 실행할 수 있습니다:
mvn -Pmetadata generate-sources
nvboot에 의해 생성된 프로젝트의 pom.xml에는 다음과 같이 metadata
라는 profile id에 dbmetadata-maven-plugin
이 설정되어 있습니다. 그리고, Skrull이 데이터베이스에 접속할 수 있도록 다음과 같은 properties를 제공해주어야 합니다:
<properties>
<jdbc.groupId>com.h2database</jdbc.groupId>
<jdbc.artifactId>h2</jdbc.artifactId>
<jdbc.version>1.3.167</jdbc.version>
<jdbc.driver>org.h2.Driver</jdbc.driver>
<jdbc.url>jdbc:h2:~/.h2/mydbname;MVCC=TRUE</jdbc.url>
<jdbc.user>admin</jdbc.user>
<jdbc.password></jdbc.password>
</properties>
<!-- skip -->
<profile>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Extract the database metadata -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<id>metadata</id>
<build>
<defaultGoal>generate-sources</defaultGoal>
<plugins>
<plugin>
<groupId>om.unvus.skrull</groupId>
<artifactId>dbmetadata-maven-plugin</artifactId>
<version>${skrull-maven-plugin.version}</version>
<executions>
<execution>
<id>Extract the database schema.</id>
<goals>
<goal>extract-metadata</goal>
</goals>
<configuration>
<jdbcTableNamePatterns>
<param>%</param>
</jdbcTableNamePatterns>
</configuration>
</execution>
<dependencies>
<dependency>
<groupId>${jdbc.groupId}</groupId>
<artifactId>${jdbc.artifactId}</artifactId>
<version>${jdbc.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
2. skrull-maven-plugin
실제 코드를 생성하는 플러그인입니다.
Plugin Detail
name: com.unvus.skrull:dbmetadata-maven-plugin
goal: generate
maven phase: generate-sources
다음과 같은 명령으로 플러그인을 실행할 수 있습니다:
mvn -Pgen generate-sources
이 플러그인은:
skrull-config
에 정의한 entity들에 대해서만 코드를 생성합니다.dbmetadata-maven-plugin:extract-metadata
에 의해 생성된metadata.xml
로부터 entity에 해당하는 table의 정보를 획득합니다.
nvboot에 의해 생성된 프로젝트의 pom.xml에는 다음과 같이 gen
이라는 profile id에 skrull-maven-plugin
이 설정되어 있습니다:
<profile>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Generate the code using Skrull -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<id>gen</id>
<build>
<defaultGoal>generate-sources</defaultGoal>
<plugins>
<plugin>
<groupId>com.unvus.skrull</groupId>
<artifactId>skrull-maven-plugin</artifactId>
<version>${skrull-maven-plugin.version}</version>
<executions>
<execution>
<id>Generates files using the extracted database schema.</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.unvus.skrull.packs</groupId>
<artifactId>skrull-pack-mybatis</artifactId>
<version>${skrull-pack-mybatis.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
3. 플러그인 사용
3.1. console
다음과 같이 console에서 직접 명령을 입력합니다:
mvn -Pmetadata,gen generate-sources
위 명령은 metadata
, gen
플러그인을 모두 주었으므로:
metadata
: 테이블로부터 정보를 얻어서 metadata.xml에 저장하고gen
: entity 설정과 metadata.xml을 이용해 코드를 생성합니다.
WARNING
기존 legacy 시스템의 테이블을 대상으로 할때에는, generate 대상 테이블이 수백개가 될 수 있습니다. 이런 경우에 metadata
작업은 매우 오래 걸릴 수 있으므로, 프로젝트 시작시 한번만 실행하고 그 이후로는 entity 설정만 추가 변경 하면서 gen
플러그인만 사용하도록 합니다.
3.2. intellij
IntelliJ IDEA의 우측 maven 탭에 사용하고자 하는 profile을 선택하고, 해당 플러그인을 double 클릭해서 실행합니다.
3.2.1. metadata
metadata
profile을 선택하면, 해당 프로젝트의 Plugins에dbmetadata
플러그인이 나타납니다.- Plugins의 dbmetadata 플러그인을 펼쳐서
dbmetadata:extract-metadata
goal을 double click하여 실행합니다.
3.2.2. gen
gen
profile을 선택하면, 해당 프로젝트의 Plugins에 skrull 플러그인이 나타납니다.- Plugins의 skrull 플러그인을 펼쳐서
skrull:generate
goal을 double click하여 실행합니다.
각 profile 체크박스는 사용 후 다시 체크해제 하도록 합니다.