加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在sbt中添加仅编译时子项目依赖项

发布时间:2020-12-16 18:39:41 所属栏目:安全 来源:网络整理
导读:我有一个多项目包含一个私有宏子项目,其用途仅限于实现其他子项目的方法体.也不应该在其他子项目的运行时类路径上,也不应该在其他子项目的已发布POM中以任何形式显示.因此,其他sbt项目可以在不知道宏子项目的情况下使用此项目中的库. 对于外部依赖,我发现这
我有一个多项目包含一个私有宏子项目,其用途仅限于实现其他子项目的方法体.也不应该在其他子项目的运行时类路径上,也不应该在其他子项目的已发布POM中以任何形式显示.因此,其他sbt项目可以在不知道宏子项目的情况下使用此项目中的库.

对于外部依赖,我发现这个SO Q&A完美无缺,但对于子项目,当我尝试对dependsOn做类似的事情时,sbt抱怨配置“compileonly”找不到.

ivyConfigurations += config("compileonly").hide

val macro = Project("macro",file("macro"))

val lib = Project("lib",file("lib")).dependsOn(macro % "compile->compileonly")

解决方法

该错误是因为项目没有该配置.

val CompileOnly = config("compileonly").hide    

ivyConfigurations += CompileOnly

val macro = Project("macro",file("macro")).configs(CompileOnly) // add config

val lib = Project("lib",file("lib")).dependsOn(macro % CompileOnly)

但问题是

macro#macro_2.10;0.1-SNAPSHOT: configuration not public in macro#macro_2.10;0.1-SNAPSHOT: ‘compileonly’. It was required from lib#lib_2.10;0.1-SNAPSHOT compile

解决方案是

val CompileOnly = config("compileonly")

val macro = Project("macro",file("macro")).configs(CompileOnly)

val lib = Project("lib",file("lib")).dependsOn(macro % CompileOnly)
  .settings(ivyConfigurations += CompileOnly.hide)

您可能还想熟悉所提供的配置.它是一个标准的Maven / Ivy配置,这意味着jar将在运行时在类路径上提供(例如像JDK或servlet容器),但不能在编译时提供.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读