【问题标题】:Using unboundid ldap in scala ... strange compile error在scala中使用unboundid ldap ...奇怪的编译错误
【发布时间】:2013-10-08 19:19:09
【问题描述】:

我正在尝试通过 scala 中的 unboundid 使用 LDAP,但编译器不断崩溃。

我刚刚创建了一个如下所示的对象:

package utils

import com.unboundid.ldap.sdk._

object LdapHelper {
  val ldap = LDAPConnection("ldap.example.com", 389)
}

我在 Build.scala 中的 appDependencies 中添加了这个:“com.unboundid”%“unboundid-ldapsdk”%“2.3.1”。我使用 Play 2.1 和 Scala 版本 2.10.1。

我收到一条非常奇怪的错误消息(见下文):

错误信息太奇怪了,我真的不知道从哪里开始寻找提示。 不确定问题出在 unboundid、play、scala、sbt 上吗?

如何在我的 scala 项目中成功集成 unboundid?

谢谢


Scala 编译器中的错误:断言失败:编译时:C:\play\todolist\app\utils\LdapHelper.scala 在阶段:global=typer,atPhase=parser 库版本:2.10.2 版编译器版本:2.10 版.2 重构参数:-classpath C:\play\todolist.target;C:\eclipse\scala-SDK-3.0.1-vfinal-2.10-win32.win32.x86_64\configuration\org.eclipse。

...

要输入的最后一棵树:Ident(LDAPConnection) 符号:(标志:) 符号定义: 符号所有者: 上下文所有者:value ldap -> object LdapHelper -> package utils

== 封闭模板或块 ==

Template( // val : 在对象 LdapHelper "java.lang.Object" // 父母 值定义( 私人的 “_” ) // 3 条语句 DefDef( // def : 在对象 LdapHelper 中 “” [] 列表(无) 堵塞( 申请( 极好的。”” 零 ) () ) ) DefDef( // def x: 在对象 LdapHelper 中 “X” [] 零 () ) ValDef( // private[this] val ldap: 在对象 LdapHelper 私人的 “LDAP” 申请( “LDAP连接” // 2 个参数 “ldap.example.com” 389 ) ) )

【问题讨论】:

    标签: scala playframework playframework-2.0 sbt unboundid-ldap-sdk


    【解决方案1】:

    在 Scala 2.10.2 中有一个警告变成了断言。

    这里有一个错误: https://issues.scala-lang.org/browse/SI-7014

    还有一个针对 2.10.4 的修复: https://github.com/scala/scala/pull/2829

    您可以使用以下 Build.scala 让 Play 使用 Scala 2.10.4-SNAPSHOT:

    import sbt._
    import Keys._
    import play.Project._
    
    object ApplicationBuild extends Build {
    
        val appName         = "AppName"
        val appVersion      = "1.0-SNAPSHOT"
    
        val mainDeps = Seq(
          jdbc,
          anorm,
          cache
        )
    
        lazy  val main = play.Project(appName, appVersion, mainDeps).settings(
          scalaVersion := "2.10.4-SNAPSHOT"
        )
    
    }
    

    如果您使用的是 build.sbt,文件将如下所示:

    import play.Project._
    
    playScalaSettings
    
    name := "AppName"
    
    version := "1.0-SNAPSHOT"
    
    scalaVersion := "2.10.4-SNAPSHOT"
    
    libraryDependencies ++= Seq(jdbc, anorm, cache) 
    

    注意:如果从 sbt 构建(而不是 play),您可能必须在 scalaVersion 行下添加存储库解析器,例如: resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/repo/"

    【讨论】:

    • 感谢您的信息!现在,我最终使用 javax.naming._ 而不是 unboundid。 :) 很高兴知道这将在 Scala 2.10.4 中修复。
    【解决方案2】:

    @jeckhart 的答案有效。

    首先,我使用 Scala 2.10.4-RC1 构建 Play 2.3 SNAPSHOT。然后使用输出使用 UnboundID 进行编译。

    最后一切都编译成功,没有断言或错误。

    为了使用 Scala 2.10.4-RC1 构建 Play 2.3 SNAPSHOT,我修改了文件 framework/project/Build.scala。

    更改这两个部分
      val buildScalaVersion = propOr("scala.version", "2.10.3")
      val buildScalaVersionForSbt = propOr("play.sbt.scala.version", "2.10.3")
    

      val buildScalaVersion = propOr("scala.version", "2.10.4-RC1")
      val buildScalaVersionForSbt = propOr("play.sbt.scala.version", "2.10.4-RC1")
    

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2016-01-23
      相关资源
      最近更新 更多