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><!-- pre-filtering, configurable since 4.0.7, optional, will be % by default -->
<param>%</param> <!-- "%" means match any substring of 0 or more characters, and "_" means match any one character -->
</jdbcTableNamePatterns>
</configuration>
</executions>
<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:skrull-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 체크박스는 사용 후 다시 체크해제 하도록 합니다.