我正在使用sbt 0.13构建多个Java项目。项目A使用默认的“sbt publish”任务在$ HOME / maven2.artifacts / www / x / y / abc / 1.0.1 / abc-1.0.1.jar中发布库“abc”。它有效,图书馆按预期存在。
项目B依赖于此工件。它声明了一个解析器(来自build.sbt
的所有代码):
resolvers ++= Seq(
"Developer's repo" at "file://"+Path.userHome.absolutePath+"/maven2.artifacts/www"
)
...以及参考值:
val abc_core = "x.y" % "abc" % "1.0.1"
然后,它使用项目定义中的引用:
lazy val def_symbol=project settings(
name:="def-symbol",
libraryDependencies += abc_core
)
这很有效。但是,当我将值定义更改为使用动态修订ID时,sbt文档建议将其设置为
val abc_core = "x.y" % "abc" % "1.0.+"
或
val abc_core = "x.y" % "abc" % "1.+"
它不再起作用了:
[warn] module not found: x.y#abc;1.+
[warn] ==== local: tried
[warn] /home/dh/.ivy2/local/x.y/abc/[revision]/ivys/ivy.xml
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/x/y/abc/[revision]/abc-[revision].pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: x.y#abc;1.+: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
我看到sbt似乎没有要求我的基于文件的解析器的依赖项。那是问题吗?我该如何解决?
答案 0 :(得分:2)
那么,
问题解决了。我必须在全局范围内声明解析器扩展,以便子项目也使用它:
resolvers in Global ++= Seq(
"Developer's repo" at "file://"+Path.userHome.absolutePath+"/maven2.artifacts/www"
)
然后,项目def_symbol
也会使用“开发人员的回购”,并且所有内容都与"1.0.+"
或"1.+"
等版本完全一致。
没有全局范围内的解析器可用,但让库解析工作仍然是因为版本1.0.1可以从另一个版本的Ivy的本地缓存中获得。从头开始,它也不起作用。
对不起噪音。我应该在发布之前再等一天。