在scala中使用unboundid ldap ...奇怪的编译错误

时间:2013-10-08 19:19:10

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

我试图在scala中通过unboundid使用LDAP,但编译器一直在崩溃。

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

package utils

import com.unboundid.ldap.sdk._

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

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

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

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

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

由于


Scala编译器出错:断言失败:编译时:C:\ play \ todolist \ app \ utils \ LdapHelper.scala阶段:global = typer,atPhase =解析器库版本:版本2.10.2编译器版本:版本2.10 .2 reconstructed args:-classpath C:\ play \ todolist.target; C:\ eclipse \ scala-SDK-3.0.1-vfinal-2.10-win32.win32.x86_64 \ configuration \ org.eclipse。

...

最后一个树到typer:Ident(LDAPConnection)               符号:(标志:)    符号定义:        符号所有者:       上下文所有者:值ldap - >对象LdapHelper - > package utils

==封闭模板或块==

模板(// val:在对象LdapHelper中   “java.lang.Object”//父母   ValDef(     私人的     “_”             )   // 3个陈述   DefDef(// def:在对象LdapHelper中          “”     []     列表(无)          块(       应用(         超。””         零       )       ()     )   )   DefDef(// def x:在对象LdapHelper中          “X”     []     零          ()   )   ValDef(// private [this] val ldap:在对象LdapHelper中     私人的     “LDAP”          应用(       “LDAPConnection”       // 2个参数       “ldap.example.com”       389     )   ) )

2 个答案:

答案 0 :(得分: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/"

答案 1 :(得分:1)

@jeckhart的答案有效。

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

最后一切都没有断言或错误。

使用Scala 2.10.4-RC1构建Play 2.3 SNAPSHOT,我修改了文件框架/ 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")