Использование unboundid ldap в scala странная ошибка компиляции

Я пытаюсь использовать LDAP через unboundid в scala, но компилятор продолжает давать сбой.

Я только что создал объект, который выглядит так:

package utils

import com.unboundid.ldap.sdk._

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

Я добавил это: "com.unboundid"% "unboundid-ldapsdk"% "2.3.1" в мои appDependencies в Build.scala. Я использую Play 2.1 и Scala версии 2.10.1.

Я получаю очень странное сообщение об ошибке (см. Ниже):

Сообщение об ошибке настолько странное, что я действительно не знаю, где искать подсказки. Не уверены, что проблема в unboundid, play, scala, sbt?

Как я могу успешно интегрировать unboundid в мой проект Scala?

Спасибо


Ошибка в компиляторе Scala: утверждение не удалось: во время компиляции: C: \ play \ todolist \ app \ utils \ LdapHelper.scala во время фазы: global = typer, atPhase = parser версия библиотеки: версия 2.10.2 версия компилятора: версия 2.10.2 реконструирована args: -classpath C: \ play \ todolist.target; C: \ eclipse \ scala-SDK-3.0.1-vfinal-2.10-win32.win32.x86_64 \ configuration \ org.eclipse.

...

последнее дерево для типирования: Идентификационный (LDAPConnection) символ: (флаги:) определение символа: владельцы символов: владельцы контекста: значение ldap -> объект LdapHelper -> package utils

== Закрывающий шаблон или блок ==

Template (// val: в объекте LdapHelper "java.lang.Object" // родители ValDef (private "_") // 3 оператора DefDef (// def: в объекте LdapHelper "" [] List (Nil) Block (Apply (super. "" Nil) ())) DefDef (// def x: в объекте LdapHelper "x" [] Nil ()) ValDef (// private [this] val ldap: в объекте LdapHelper private "ldap" Apply ( "LDAPConnection" // 2 аргумента "ldap.example.com" 389)))


person nemoo    schedule 08.10.2013    source источник


Ответы (2)


Это вызвало предупреждение, которое превратилось в утверждение в Scala 2.10.2.

Здесь обнаружена ошибка: https://issues.scala-lang.org/browse/SI-7014

И исправление для 2.10.4: https://github.com/scala/scala/pull/2829

Вы можете попросить Play использовать Scala 2.10.4-SNAPSHOT, используя следующий Build.scala:

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/"

person jeckhart    schedule 24.10.2013
comment
Спасибо за информацию! На данный момент я использовал javax.naming._ вместо unboundid. :) Приятно знать, что это будет исправлено в Scala 2.10.4. - person nemoo; 24.10.2013

Ответ от @jeckhart работает.

Сначала я использую Scala 2.10.4-RC1 для создания Play 2.3 SNAPSHOT. Затем используйте вывод для компиляции с UnboundID.

Наконец, все компилируется без утверждений или ошибок.

Чтобы собрать Play 2.3 SNAPSHOT с использованием Scala 2.10.4-RC1, я изменил файл framework / project / Build.scala.

Измените эти два раздела с

  val buildScalaVersion = propOr("scala.version", "2.10.3")
  val buildScalaVersionForSbt = propOr("play.sbt.scala.version", "2.10.3")

to

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