我有一个多项目包含一个私有宏子项目,其用途仅限于实现其他子项目的方法体。它既不应该出现在其他子项目的运行时类路径上,也不应该以任何形式在其他子项目已发布的 POM 中可见。这样其他 sbt 项目就可以在不知道宏子项目的情况下使用该项目中的库。
对于外部依赖,我发现了这个所以问答 https://stackoverflow.com/questions/21515325/add-a-compile-time-only-dependency-in-sbt/21516954工作完美,但是对于子项目,当我尝试做类似的事情时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: 配置在 Macro#macro_2.10;0.1-SNAPSHOT: 'compileonly' 中不公开。 lib#lib_2.10;0.1-SNAPSHOT 编译需要它
解决办法是
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)
您可能还想熟悉一下provided
配置。这是一个标准的 Maven/Ivy 配置,这意味着该 jar 将在运行时在类路径上提供(例如,像 JDK 或 servlet 容器),但不会在编译时提供。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)