jooq + scala代码生成:对象中的方法createIndex无法在对象org.jooq.impl.AbstractKeys中访问AbstractKeys

时间:2018-01-19 08:32:02

标签: scala jooq

我有生成jooq代码的sbt任务

val generateJOOQ = taskKey[Seq[File]]("Generate JooQ classes")

val generateJOOQTask = (sourceManaged, fullClasspath in Compile, runner in Compile, streams) map { (src, cp, r, s) =>
  toError(r.run("org.jooq.util.GenerationTool", cp.files, Array("conf/jooq.xml"), s.log))
  ((src / "main/generated") ** "*.scala").get
}

generateJOOQ <<= generateJOOQTask

unmanagedSourceDirectories in Compile += sourceManaged.value / "main/generated"

这是jooq.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.10.4.xsd">
    <jdbc>
        <driver>org.postgresql.Driver</driver>
        <url>jdbc:postgresql://localhost/postgres</url>
        <user>postgres</user>
        <password>postgres</password>
    </jdbc>
    <generator>
        <name>org.jooq.util.ScalaGenerator</name>
        <database>
            <name>org.jooq.util.postgres.PostgresDatabase</name>
            <inputSchema>public</inputSchema>
            <includes>.*</includes>
            <excludes></excludes>
        </database>
        <target>
            <packageName>generated</packageName>
            <directory>target/scala-2.12/src_managed/main</directory>
        </target>
    </generator>
</configuration>

我使用scala 2.12.4

代码生成正常。

但是当我编译项目时,出现编译错误。

  

... / scala-2.12 / src_managed / main / generated / Indexes.scala:58:方法   对象中的createIndex不能在对象中访问AbstractKeys   org.jooq.impl.AbstractKeys       [error]不允许访问受保护的方法createIndex,因为       [error]前缀类型org.jooq.impl.AbstractKeys.type不符合       [error] object对象中的索引0索引进行访问的索引       [error] val PENDING_USERS_EMAIL_IDX:Index = AbstractKeys.createIndex(“pending_users_email_idx”,   PendingUsers.PENDING_USERS,ArrayOrderField [_]   ,假)

当我尝试降级到scala 2.12.3时,它运行正常。

是否有任何解决方案可以使其与scala 2.12.4一起使用?

我不想降级scala版本。它开始让我感到沮丧,即使是次要版本(2.12.4 - 2.12.3)也不向后兼容吗?

1 个答案:

答案 0 :(得分:1)

这是Scala 2.12.4编译器中的已知回归。此处记录了一种解决方法:https://github.com/jOOQ/jOOQ/issues/6875

您可以对生成的jOOQ代码进行后处理,直到2.12.5中修复了编译器问题:

搜索

AbstractKeys.createUniqueKey(TAuthor.T_AUTHOR, "PK_T_AUTHOR", TAuthor.T_AUTHOR.ID)

<强>替换

org.jooq.tools.reflect.Reflect.on(classOf[AbstractKeys])
   .call("createUniqueKey", TAuthor.T_AUTHOR, "PK_T_AUTHOR", TAuthor.T_AUTHOR.ID).get()