簡體   English   中英

解決Scala宏和編譯器框架在SBT中的依賴性

[英]Resolving the dependency of Scala Macros and Compiler Framework in SBT

我正在嘗試編寫一個框架,以便更輕松地編寫Scala編譯器插件,我正在做的是在Scala quasiquotes之上編寫一個框架。 所以我的項目依賴於來自宏天堂的宏以及scala-compiler和scala-reflect庫。

我按照這里提到的說明寫了一個SBT構建腳本: https//github.com/scalamacros/sbt-example-paradise/blob/master/project/Build.scala

並使用scalaVersion 2.11.0-SNAPSHOT,2.10.3-SNAPSHOT,2.10.3-RC1,2.10.2來編譯我的項目,但它們都沒有工作。 這是我的sbt構建腳本:

import sbt._
import Keys._

object LombrelloBuildSettings {
  val sversion = "2.10.3-SNAPSHOT"
  val buildSettings = Defaults.defaultSettings ++ Seq(
  name := "lombrello",
  organization := "ch.usi.inf.l3",
  version := "0.1-SNAPSHOT",
  scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"),
  scalaVersion := sversion,
  scalaOrganization := "org.scala-lang.macro-paradise",
  resolvers += Resolver.sonatypeRepo("snapshots"),
  licenses := ("BSD 3-Clause", new java.net.URL("http://opensource.org/licenses/BSD-3-Clause")) :: Nil,
  libraryDependencies ++= Seq("org.scala-lang.macro-paradise" % "scala-reflect" % sversion,
      "org.scala-lang" % "scala-compiler" % sversion),
  addCompilerPlugin("org.scala-lang.plugins" % "macro-paradise" % "2.0.0-SNAPSHOT" cross CrossVersion.full))
}

object LombrelloBuild extends Build {
  import LombrelloBuildSettings._

  lazy val root: Project = Project(
    "root",
    file("."),
    settings = buildSettings ++ Seq(
      run <<= run in Compile in tests
    )
  ) aggregate (main, tests)

  lazy val main: Project = Project(
    "main",
    file("src/main"),
    settings = buildSettings

  )

 lazy val tests: Project = Project(
   "tests",
   file("src/test"),
   settings = buildSettings ++ Seq(name := "tests")) dependsOn (main)
}

使用scalaVersion 2.10-3-RC1,我收到以下錯誤:

[warn]  :::::::::::::::::::::::::::::::::::::::::::::: 
[warn]  ::          UNRESOLVED DEPENDENCIES         :: 
[warn]  :::::::::::::::::::::::::::::::::::::::::::::: 
[warn]  :: org.scala-lang.macro-paradise#scala-library;2.10.3-RC1: not found 
[warn]  :: org.scala-lang.macro-paradise#scala-reflect;2.10.3-RC1: not found 
[warn]  :: org.scala-lang.macro-paradise#scala-compiler;2.10.3-RC1: not found 
[warn]  :::::::::::::::::::::::::::::::::::::::::::::: 
sbt.ResolveException: unresolved dependency: org.scala-lang.macro-paradise#scala-library;2.10.3-RC1: not found 
unresolved dependency: org.scala-lang.macro-paradise#scala-reflect;2.10.3-RC1: not found 
unresolved dependency: org.scala-lang.macro-paradise#scala-compiler;2.10.3-RC1: not found 
    at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:213) 
    at sbt.IvyActions$$anonfun$update$1.apply(IvyActions.scala:122) 

使用,scalaVersion 2.11.0-SNAPSHOT,我收到以下錯誤:

 java.lang.NoClassDefFoundError: scala/tools/nsc/typechecker/TypersTracking$class
    at org.scalalang.macroparadise.Plugin$$anon$1.<init>(Plugin.scala:20)
    at org.scalalang.macroparadise.Plugin.<init>(Plugin.scala:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

在使用版本2.10.3-SNAPSHOT時,我得到以下內容:

 [warn]     ::::::::::::::::::::::::::::::::::::::::::::::
 [warn]     ::          UNRESOLVED DEPENDENCIES         ::
 [warn]     ::::::::::::::::::::::::::::::::::::::::::::::
 [warn]     :: org.scala-lang.plugins#macro-paradise_2.10.3-SNAPSHOT;2.0.0-SNAPSHOT: not found
 [warn]     ::::::::::::::::::::::::::::::::::::::::::::::
 sbt.ResolveException: unresolved dependency: org.scala-lang.plugins#macro-paradise_2.10.3-SNAPSHOT;2.0.0-SNAPSHOT: not found

版本2.10.2無法解決scala-library,scala-reflect和2.10.2的依賴關系(如2.10.3-RC1)!

我的問題是,是否可以混合使用編譯器API和Macro API並使它們在SBT下工作,如果是的話我的構建腳本究竟出了什么問題?

看來我在SBT配置中使用了一些錯誤的設置。 我不需要更改scalaOrganization,也不需要為我的庫依賴項添加宏天堂。 所以設置應該變成:

val sversion = "2.10.2"
val buildSettings = Defaults.defaultSettings ++ Seq(
    name := "lombrello",
    organization := "ch.usi.inf.l3",
    version := "0.1-SNAPSHOT",
    scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"),
    scalaVersion := sversion,
    resolvers += Resolver.sonatypeRepo("snapshots"),
    licenses := ("BSD 3-Clause", new java.net.URL("http://opensource.org/licenses/BSD-3-Clause")) :: Nil,
    libraryDependencies ++= Seq("org.scala-lang" % "scala-reflect" % sversion,
        "org.scala-lang" % "scala-compiler" % sversion),
    addCompilerPlugin("org.scala-lang.plugins" % "macro-paradise" % "2.0.0-SNAPSHOT" cross CrossVersion.full)
    )

所有學分去尤金Burmako在此評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM