Scala コンパイラ プラグインを簡単に記述できるようにするためのフレームワークを作成しようとしています。したがって、私のプロジェクトはマクロパラダイスのマクロと、scala-compiler および scala-reflect ライブラリの両方に依存しています。
ここに記載されている手順に従って、SBT ビルド スクリプトを作成しました。
そして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 とマクロ API の両方を混在させて SBT で動作させることは可能ですか? もしそうなら、ビルド スクリプトの何が問題なのですか?