是否可以使用SBT反射?

我试图用SBT生成一些样板(这对我来说是全新的工具)。 我使用无形的sbt文件作为我的主要参考任务。 我已经看到这个项目从头开始使用代码生成,但我的情况稍有不同,因为我想从另一个生成一些类。 我假装使用新的Scala 2.10.0-M4反射功能。 需要从SBT构建中获得反射的基本配置?

到目前为止,sbt无法找到scala.reflect.runtime.universe软件包,我不知道问题是出自新的Scala jar分区还是来自错误的配置。 此外,我的朋友说:

[info] This is sbt 0.13.0-20120530-052139
[info] The current project is {file:/home/jlg/sandbox/abc/}abc
[info] The current project is built against Scala 2.10.0-SNAPSHOT
[info] 
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2

顺便说一句,有没有人知道使用SBT生成源代码的其他项目?


目前的SBT版本基于Scala 2.9,并且源代码生成与SBT一起运行,具有相同的库。 基本上有两种选择:

  • 是非常出血的边缘:得到一个运行在Scala 2.10上的SBT版本(即使是0.13分支也没有),或者等待它。 最大的问题不仅仅是你必须自己重新编译SBT,而是重新编译Scala 2.10所需的每一个SBT插件。 从长远来看,这也许是你所要求的最好的策略,但现在可能需要付出很多努力。 但是,请注意,如果不使用恶作剧,则无法在编译的代码上使用反射,因为代码生成应该在编译之前进行。 如果您需要这样做,请考虑使用宏在程序内编译时生成代码。 这不包括SBT,并且更为标准,但我不确定是否可以在此版本中生成完整的课程(这是我认为未来计划的课程)。
  • 与旧的:继续使用Scala 2.9并使用scalap的功能(ScalaSigParser)进行编译时反射。 问题在于API是不同的(不知道有多深),并且没有真正支持公共使用,尽管不同的人已经使用了很长时间。 对于我正在运行的项目,一位同事实施了一种方法,并将其整合到我的项目的SBT中(https://github.com/ps-mr/LinqOnSteroids/); 最重要的是,我使用Scalate来编写用于代码生成的模板,这非常强大。 特别参见build.sbt,它调用项目/ Generator.scala和project / src / main / scala / ivm / generation / ScalaSigHelpers.scala(一些非全通用的ScalaSigParser包装器)。 生成代码的Scalate模板在src / main / resources中,这里最相关的是src / main / resources / WrappedClassInlined.ssp。 涉及更多的东西,我担心你会实际需要一个结帐和玩它来看看它究竟做了什么 - 但随时提问。
  • 请注意,代码受BSD许可证保护,因此如果您复制代码,则需要保留原始版权。

    注意:所有链接(许可证除外)都是为了稳定性而保留在当前HEAD中,以便即使未来版本中的文件被移动/删除,它们也不会轻易消失。


    如果你使用的是2.10.0-SNAPSHOT,那么你应该去scala.reflect.runtime.universe 。 查看http://dcsobral.blogspot.ch/2012/07/json-serialization-with-reflection-in.html了解更多信息。

    链接地址: http://www.djcxy.com/p/61533.html

    上一篇: Is it possible to use reflection from SBT?

    下一篇: How do I fix a ValueError: read of closed file exception?