【doma-gen】Gradle(3.2以降)でdoma-genを使用する方法を紹介

「doma-gen」をGradleで実行する際に「公式ドキュメント」を参考にして設定したにも関わらず、エラーとなることがないでしょうか。

公式ドキュメントに記載されているのは、古いGradle(正確なバージョンはわかりません)の記載方法では新しいGradle 3.2以降ではエラーとなることがあります。

今回は、Gradle 3.2以降を使用して「doma-gen」を実行する方法、エラーとなる原因、統合開発環境からの実行方法の紹介をします。

環境

  • goma-gen:2.21.0
  • gradle:5.1.1

前提条件

実際に動作させる場合は、事前にGradleの実行可能環境を用意してください。
または、「https://github.com/fumidzuki/doma-gen-template」にdoma-genを実行するためのサンプルを作成しましたので適宜使用してください。

設定方法

「build.gradle」の設定は。公式ドキュメントの情報を参考に設定します。使用するJDBC、DB接続先の設定は適宜変更してください。

configurations {
  domaGenRuntime
}

repositories {
  mavenCentral()
  maven {url 'https://oss.sonatype.org/content/repositories/snapshots/'}
}

dependencies {
  domaGenRuntime 'org.seasar.doma:doma-gen:2.21.0'
  domaGenRuntime 'org.postgresql:postgresql:9.3-1100-jdbc41'
}

task gen << {
  ant.taskdef(resource: 'domagentask.properties',
    classpath: configurations.domaGenRuntime.asPath)
  ant.gen(url: 'jdbc:postgresql://127.0.0.1/example', user: '', password: '') {
    entityConfig()
    daoConfig()
    sqlConfig()
  }
}

ただし、この内容で作成してtaskを実行した場合は、Gradle 3.2以降のバージョンでは問題が発生します。

問題点

「Could not find method leftShift() for arguments」が出力されエラーになる

Gradle 3.2以降から「<<」の記載が非推奨になりました。詳細は「こちら」を確認してください。
「build.gradle」を以下のように修正することでエラーとならず実行できるようになります。ポイントとしては「<<」を「doLast」に変更しています。

task gen {
  doLast {
    ant.taskdef(resource: 'domagentask.properties',
        classpath: configurations.domaGenRuntime.asPath)
    ant.gen(url: 'jdbc:postgresql://127.0.0.1/example', user: '', password: '') {
        entityConfig()
        daoConfig()
        sqlConfig()
    }
  }
}

統合開発環境から実行できない(Eclipse、IntelliJなど)

統合開発環境などを使用している場合、Gradleを実行するタスクを表示する機能があると思いますが、「build.gradle」にタスクを追加したにも関わらず表示されないことがあります。

原因は、タスクの設定方法が不足しているためです。タスクの宣言を以下のようにすることで、統合開発環境からも実行できるようになります。

task gen {
  group = 'doma-gen'
  description = '※任意項目です。タスクの説明を記載してください。'
  doLast {
    ant.taskdef(resource: 'domagentask.properties',
        classpath: configurations.domaGenRuntime.asPath)
    ant.gen(url: 'jdbc:postgresql://127.0.0.1/example', user: '', password: '') {
        entityConfig()
        daoConfig()
        sqlConfig()
    }
  }
}

knowledge
スポンサーリンク
fumidzuki