Skip to content

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

다음과 같은 명령으로 플러그인을 실행할 수 있습니다:

bash
mvn -Pmetadata generate-sources

nvboot에 의해 생성된 프로젝트의 pom.xml에는 다음과 같이 metadata라는 profile id에 dbmetadata-maven-plugin이 설정되어 있습니다. 그리고, Skrull이 데이터베이스에 접속할 수 있도록 다음과 같은 properties를 제공해주어야 합니다:

xml
<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

다음과 같은 명령으로 플러그인을 실행할 수 있습니다:

bash
mvn -Pgen generate-sources

이 플러그인은:

  1. skrull-config에 정의한 entity들에 대해서만 코드를 생성합니다.
  2. dbmetadata-maven-plugin:extract-metadata에 의해 생성된 metadata.xml로부터 entity에 해당하는 table의 정보를 획득합니다.

nvboot에 의해 생성된 프로젝트의 pom.xml에는 다음과 같이 gen이라는 profile id에 skrull-maven-plugin이 설정되어 있습니다:

xml
<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에서 직접 명령을 입력합니다:

bash
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 체크박스는 사용 후 다시 체크해제 하도록 합니다. maven-cmd