点群はそのままレンダリングすることも可能であるが、そのデータ形式のままでは各種の3次元処理には適さないことが多い。そこでデータを面形式に変換し、ポリゴン、不整三角網のメッシュ、非一様有理Bスプライン (NURBS)曲面、CADモデルなどとして扱うことが多い。
変換手法には、ドロネー三角形分割、アルファシェイプ法など、存在する点の位置から面を生成する手法と、点群を3次元距離場(英: volumetric distance field)に変換し、陰的表面(英: implicit surface)に変換する手法がある。
点群から得られた立体データは医用画像処理などにも用いられる。点群を利用することでデータの削減が可能である。
「ポイントクラウド」なるものが、存在すると。はい、どうもボクです。今回も全く関係のない話から入ってしまいましたけど。
Javaとデータベースの連携について、レッツトライ~。
結論、JOOQっていうORM を使おうとしたんですが、JOOQの無償版については、Oracle Ddatabaseに未対応だったことが判明し、今回はJava によるDB接続ができていませんので、お時間のある方のみご照覧ください。
2019年9月29日(日)17:00 追記 ↓ ここから
JOOQのDBサポートとか。
2019年9月29日(日)17:00 追記 ↑ ここまで
ORM(Object-relational mapping)って?
Wikipediaさんによりますと、
オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。オブジェクト関連マッピングとも呼ぶ。
実際には、オブジェクト指向言語から使える「仮想」オブジェクトデータベースを構築する手法である。オブジェクト関係マッピングを行うソフトウェアパッケージは商用のものもフリーなものもあるが、場合によっては独自に開発することもある。
であると。
図にすると、こんな感じでしょうか。
Object Schema のほうには、
なんかのオブジェクトが当てはまって、
Data Schema のほうには、
- Oracle Database
- SQL Server
- MySQL
- SQLite
なんかのテーブルが当てはまる感じであると。
具体的なマッピングのイメージはこんな感じかと。
上記のイメージ図には描いてないですが、テーブルとかJOINして、オブジェクトにマッピングとかもあるんでしょうね、きっと。
ORM(Object-relational mapping)の種類
んで、ORMについては、種類が様々あると。
⇧ 上記サイト様が詳しいですが、
ORMの種類 | 代表的なORM |
---|---|
JDBCラッパー型 | Spring JDBC、Apache Common DbUtils、sql2o |
SQLマッパー型 | MyBatis、Doma、Mirage SQL、jdbi |
クエリビルダー型 | JOOQ、DBFlute、Reladomo、Querydsl、Ebean、Speedment、 Jinq、requery、Cayenne、Torque |
ORマッパー型 |
Hibernate、EclipseLink |
これだけの種類があるらしい...多すぎでしょ...
ORM については、結構意見が割れていて、
casual-tech-note.hatenablog.com
⇧ 痒い所に手が届かないってところがあるため、せっかくORM使っても一部では生のSQLを使わざるを得なくなって、プロジェクトの構成が訳の分からないことになるってことも起こるらしい。
つまり、ORMは確かに便利らしいんですが、複雑なSQLには対応できない代物であるため、妥協して使用していくしかないのが現状らしい。
便利だから使ったけど、実現できないことが出てきて、調査に時間がむちゃくちゃ取られるという本末転倒パターンは、フレームワークあるあるだよね~、ドキュメントをちゃんと記載して欲しいもんですけどね。
とりあえず、JOOQ って ORM を使ってみる
とりあえず、JOOQ ってORMを使ってみますか。
⇧ 上記サイト様を参考に、SpringBoot なプロジェクトで、JOOQ を使って、Oracle Databaseとの連携をしていこうかと。
統合開発環境としては、Eclipse を使用するので、SpringBootでプロジェクトを作る場合は、
- STS(Spring Tool Suite)というEclipseプラグインを導入する
- https://start.spring.io/ でプロジェクトの雛型を作成する
のどっちかで始める感じですかね。
STS(Spring Tool Suite)というEclipseプラグインを導入する場合は、
⇧ 上記サイト様を参考に構築してみてください。
2. https://start.spring.io/ については、
⇧ 上記サイト様によりますと、curl コマンドからも実行できるらしい。
今回はブラウザ上で、SpringBootをGradleプロジェクトとして作成で。
とりあえず、依存関係には、3つほど追加。
んで、「Generate - Ctrl + ↩」のボタンをクリック。
zip ファイルがダウンロードされます。
この中身を、Eclipseのワークスペースとかに展開しました。
んで、Eclipseを起動し、「ファイル(F)」>「インポート(I)...」で。
SpringBootをGradleプロジェクトとして作成しているので、「Gradle」>「Existing Gradle Project」を選択で。
展開しておいたGradleプロジェクトを選択。「次へ(N) >」で。
「次へ(N) >」で。
「完了(F) >」で。
プロジェクトがインポートされました。
Oracle Database 19c のJDBCドライバをダウンロードしときます。
https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html にアクセス。「Oracle Database 19c(19.3) driver - NEW!」ってのを今回はチョイス。
「ojdbc8.jar」を選択。
「I accept the Oracle License Agreement」のチェックっクスにチェックを入れて、「Downlod ojdbc8.jar」を選択。
ダウンロードされました。
そしたらば、
⇧ 上記サイト様によりますと、プロジェクト直下に「lib」ディレクトリを作成するらしい、maven の場合の例だけど。
そしたらば、「lib」ディレクトリに、「ojdbc8.jar」を配置で。
「ファイルをコピー(C)」で「OK」。
で、こっから、Gradleの場合はどうすんべ?ってことなんだけど、
⇧ これしか情報が無いのよね...しかもH2DB(H2 Database Engine)の場合の情報しかないって...
とりあえず、テーブルにマッピングされたObject Shcemeが配置される場所をパッケージとして作成ですかね。
そしたら、build.gradle を更新するようですが、
We recommend using the Gradle plugin by Etienne Studer (from Gradle Inc.).
It provides a concise DSL that allows you to tune all configuration properties supported by each jOOQ version. Please direct any support questions or issues you may find directly to the third party plugin vendor.
⇧ なんと、 外部に丸投げらしい...おすすめの方法で指定しておいて、何か問題が起きたら外部に丸投げ、責任を取らない営業の人が得意そうですね。
If you don't want to use the above third party plugin, there's also the possibility to use jOOQ's standalone code generator for simplicity. The following working example build.gradle script should work out of the box:
⇧ プラグイン使いたくない人は、groovyのxml で定義したソースコードでイケるよって言ってんだけど、H2DB(H2 Database Engine)の見本しか無いから使えんしね...Gradleに関してJOOQはやる気ないっぽいっすね。
まぁ、何にせよ、プラグインを導入していくしかないかと、だって本番環境でH2DB(H2 Database Engine)なんか使わないっしょ、普通。
んで、プラグイン。
とか、導入して、設定とかするんだけど、どうしても繋がらない。ここで衝撃の事実。
i confirmed it was commercial support.
stop supporting oracle database? · Issue #7060 · jOOQ/jOOQ · GitHub
⇧ Oracle Database は、JOOQ の商用版でしか使えないらしい(涙)。
私の無駄にした 3日間を返して欲しい 。
確かに、無料版のJOOQ に、Oracle Database は無いっすね...
ダウンロードのページで、
⇧ Open Source DB ってリンクをクリックすると、
JOOQのサポートDBの一覧があった...
⇧ Oh, my gosh...Oracle Database not found(涙)。っていうかDBサポートの情報までのリンクが分かりにくいな~。
Oracle Database 離れが進むのも致し方ないのかもと思ってしまう今日この頃...。
本日の結論。ドキュメントの導線は分かりにくいけど、ドキュメントを頑張って読み解くしかない。3日間あったら、いろんなことができたのに...
今回はこのへんで。
NG集
結局、商用版のJOOQでしか、Oracle Database を使えないことが判明したんだけど、せっかくなんで、build.gradle の中身を備忘として掲載。
plugins { id 'org.springframework.boot' version '2.1.8.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' id 'java' id 'nu.studer.jooq' version '3.0.3' // ← gradle-jooq-plugin のために追記 } group = 'com.ts0818' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-jooq' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' compile fileTree(dir: 'lib', include: '*.jar') // ← ojdbc8.jar(ローカルに配置した Oracle DatabaseのJDBC)を読み込み compile 'org.jooq:jooq' // ← gradle-jooq-plugin のために追記 jooqRuntime group: 'com.oracle', name: 'ojdbc8', version: '19.3.0.0' // ← gradle-jooq-plugin のために追記 } // ↓gradle-jooq-plugin のために追記 jooq { version = '3.11.11' edition = 'OSS' tables(sourceSets.main) { jdbc { driver = 'oracle.jdbc.driver.OracleDriver' url = 'jdbc:oracle:thin@[ホスト]:[Oracleリスナーのポート]:[Oracleリスナーのサービス名]' user = 'oracle database にログインするためのユーザ' password = 'oracle database にログインするためのパスワード' } generator { name = 'org.jooq.codegen.DefaultGenerator' database { name = 'org.jooq.meta.oracle.OracleDatabase' includes= '.*' excludes = '' } target { packageName = 'db' directory = 'src/main/java' } } } }
んで、Gradleタスクの、build を実行すると、
エラー。
右クリックで、「Show Failures」をクリック。
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':generateTablesJooqSchemaSource'. at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.lang.Thread.run(Thread.java:748) Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':jooqRuntime'. at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:1258) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$2200(DefaultConfiguration.java:139) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1233) at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:75) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.iterator(DefaultConfiguration.java:486) at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter$FileCollectionLeafVisitorImpl.visitCollection(DefaultFileCollectionSnapshotter.java:60) at org.gradle.api.internal.file.AbstractFileCollection.visitLeafCollections(AbstractFileCollection.java:262) at org.gradle.api.internal.file.CompositeFileCollection.visitLeafCollections(CompositeFileCollection.java:205) at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter.snapshot(DefaultFileCollectionSnapshotter.java:50) at org.gradle.internal.fingerprint.impl.AbstractFileCollectionFingerprinter.fingerprint(AbstractFileCollectionFingerprinter.java:46) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.lambda$visitInputFileProperties$0(ExecuteActionsTaskExecuter.java:283) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$fingerprintInputFiles$3(CaptureStateBeforeExecutionStep.java:154) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.visitInputFileProperties(ExecuteActionsTaskExecuter.java:281) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.fingerprintInputFiles(CaptureStateBeforeExecutionStep.java:150) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.createExecutionState(CaptureStateBeforeExecutionStep.java:114) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:67) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47) at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108) at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67) at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) ... 27 more Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.oracle:ojdbc8:19.3.0.0. Required by: project : Root cause: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':jooqRuntime'. at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:1258) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$2200(DefaultConfiguration.java:139) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1233) at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:75) at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.iterator(DefaultConfiguration.java:486) at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter$FileCollectionLeafVisitorImpl.visitCollection(DefaultFileCollectionSnapshotter.java:60) at org.gradle.api.internal.file.AbstractFileCollection.visitLeafCollections(AbstractFileCollection.java:262) at org.gradle.api.internal.file.CompositeFileCollection.visitLeafCollections(CompositeFileCollection.java:205) at org.gradle.internal.fingerprint.impl.DefaultFileCollectionSnapshotter.snapshot(DefaultFileCollectionSnapshotter.java:50) at org.gradle.internal.fingerprint.impl.AbstractFileCollectionFingerprinter.fingerprint(AbstractFileCollectionFingerprinter.java:46) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.lambda$visitInputFileProperties$0(ExecuteActionsTaskExecuter.java:283) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$fingerprintInputFiles$3(CaptureStateBeforeExecutionStep.java:154) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.visitInputFileProperties(ExecuteActionsTaskExecuter.java:281) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.fingerprintInputFiles(CaptureStateBeforeExecutionStep.java:150) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.createExecutionState(CaptureStateBeforeExecutionStep.java:114) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:67) at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47) at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108) at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67) at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.lang.Thread.run(Thread.java:748) Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.oracle:ojdbc8:19.3.0.0. Required by: project : Root cause: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.oracle:ojdbc8:19.3.0.0. Required by: project :
って起こられて、「Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':jooqRuntime'. 」ってエラー部分で、もしやと思って、JOOQのサポートDBを見たら、無償版のJOOQじゃOracle Databaseはサポートしとらんと(涙)。