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 플러그인을 모두 주었으므로,

  1. metadata : 테이블로 부터 정보를 얻어서 metadata.xml 에 저장하고
  2. gen : entity 설정과 metadata.xml 을 이용해 코드를 생성합니다.

WARNING

기존 legacy 시스템의 테이블을 대상으로 할때에는, generate 대상 테이블이 수백개가 될 수 있습니다.
이런 경우에 metadata 작업은 매우 오래 걸릴 수 있으므로, 프로젝트 시작시 한번만 실행하고 그 이후로는 entity 설정만 추가 변경 하면서 gen 플러그인만 사용 하도록 합니다.

3.2. intellij

IntelliJ IDEA 의 우측 maven 탭에 사용하고자 하는 profile 을 선택하고,
해당 플러그인을 double 클릭해서 실행합니다.

3.2.1. metadata

  1. metadata profile 을 선택하면, 해당 프로젝트의 Plugins 에 dbmetadata 플러그인이 나타탑니다.
  2. Plugins 의 dbmetadata 플러그인을 펼쳐서 dbmetadata:extract-metadata goal 을 double click 하여 실행합니다.

3.2.2. gen

  1. gen profile 을 선택하면, 해당 프로젝트의 Plugins 에 skrull 플러그인이 나타탑니다.
  2. Plugins 의 skrull 플러그인을 펼쳐서 skrull:generate goal 을 double click 하여 실행합니다.

각 profile 체크박스는 사용 후 다시 체크해제 하도록 합니다.