Skip to content

Latest commit

 

History

History
127 lines (85 loc) · 4.71 KB

README_CN.md

File metadata and controls

127 lines (85 loc) · 4.71 KB

https://bitlap.org

scala-macro-tools

Project Stage CI Codecov
Stage CI codecov
Scaladex Jetbrains Plugin Nexus Snapshots
scala-macro-tools Scala version support Version Sonatype Nexus (Snapshots)

该库的目的

学习Scala宏编程(macro)和抽象语法树(ast)。

本项目目前处于实验阶段,有建议、意见或者问题欢迎提issue。如果本项目对你有帮助,欢迎点个star。

中文说明 | English

环境

  • Java 8、11 编译通过
  • Scala 2.11.12、2.12.14、2.13.6 编译通过

模块功能

tools

  • @toString
  • @json
  • @builder
  • @log
  • @apply
  • @constructor
  • @equalsAndHashCode
  • @jacksonEnum
  • @elapsed
  • @javaCompatible
  • ProcessorCreator

Intellij插件 Scala-Macro-Tools

cacheable-core

基于zio的类似Spring@Cacheable@CacheEvict注解的缓存API定义。该模块不包含具体的存储媒介。

  • @cacheable / Cache.apply
  • @cacheEvict / Cache.evict

cacheable-caffeine

基于zio和caffeine的内存缓存实现,需要cacheable-core

cacheable-redis

基于zio和zio-redis的分布式缓存实现,需要cacheable-core

文档

https://bitlap.org/zh-CN/lab/smt

如何使用

添加库依赖,在sbt中

在gradle,maven中,通常smt-tools被替换为smt-tools_2.12这种。其中,2.12表示Scala版本号。

使用tools模块

"org.bitlap" %% "smt-tools" % "<VERSION>" //从0.4.0开始名字改成 smt-tools 

使用cacheable模块API

// 内部包含的依赖: zio, zio-streams, zio-logging
"org.bitlap" %% "smt-cacheable-core" % "<VERSION>"

使用redis实现的cacheable模块

TODO,目前不可用,无分布式锁

// 分布式缓存, 内部包含的依赖: zio-redis, config, zio-schema, zio-schema-json, 可选的 (zio-schema-derivation用于样例类序列化)
// 依赖于`smt-cacheable-core`(不支持 Scala2.11.x)
"org.bitlap" %% "smt-cacheable-redis" % "<VERSION>"

使用caffeine实现的cacheable模块

// 本地缓存, 内部包含的依赖: config, caffeine
// 依赖于`smt-cacheable-core`
"org.bitlap" %% "smt-cacheable-caffeine" % "<VERSION>"

该库已发布到maven中央仓库,请使用最新版本。仅将本库导入构建系统(例如gradle、sbt)是不够的。你需要多走一步。

Scala 2.11 Scala 2.12 Scala 2.13
导入 macro paradise 插件 导入 macro paradise 插件 开启 编译器标记 -Ymacro-annotations
addCompilerPlugin("org.scalamacros" % "paradise_<your-scala-version>" % "<plugin-version>")

<your-scala-version>必须是Scala版本号的完整编号,如2.12.13,而不是2.12

如果这不起作用,可以谷歌寻找替代品。

scala 2.13.x版本中,macro paradise的功能直接包含在scala编译器中。然而,仍然必须启用编译器标志-Ymacro annotations