我正在尝试创建一个包含类
的本地库myproject.scala:
object test {
def info(message: String): Unit = println(s"INFO: $message")
}
build.sbt:
name := "MyProject"
version := "0.1"
organization := "MyCorp"
scalaVersion := "2.11.0"
sbtVersion := "0.13"
我运行了sbt clean编译publishLocal,我在本地ivy2目录中看到了jar。我不确定的是如何在另一个项目中使用该库。
我添加了libraryDependencies += "MyCorp"%"myproject_2.11"%"0.1"
到第二个项目的sbt,当我在repl中打印出来时,我在classPath中看到了它。问题是我尝试的时候
导入MyCorp.myproject
我找不到错误。我确定我错过了一些简单的东西,但它让我疯狂。
答案 0 :(得分:1)
我运行了sbt clean编译,我在本地ivy2目录中看到了jar。
这很奇怪。 sbt clean compile
不会在本地存储库中发布工件。 (您是否已在那里手动复制?)这应该是使用publishLocal
命令完成的,并且工件应该在{path_to_.ivy2}/local/MyCorp/MyProject/0.1/jars/MyProject.jar
处可用。
现在在你的第二个项目中,它可以添加为
libraryDependencies += "MyCorp" % "MyProject" % "0.1"
// or in libraryDependencies ++= Seq(...)
请注意,您在名称中使用的_2.11
后缀取决于第一个项目的构建方式,其构建是否由Scala版本区分。如果是,后缀通常会出现在工件.jar文件名中。最好避免在库依赖声明中包含后缀,而是使用%%
进行内置支持。
检查后,还尝试重新启动SBT CLI,但遗憾的是,build.sbt
中的某些更改有时不会被考虑在内。
更新
我假设它的mycorp.myproject.test,但我尝试了所有可能的组合。 @布赖恩
在评论之后,我认为项目中应该存在错误配置和/或描述中缺少的内容。
假设有一个文件{path/to/project}/src/main/scala/mycorp/myproject/Test.scala
,其中包含以下内容:
package mycorp.myproject
object Test {
def info(message: String): Unit = println(s"INFO: $message")
}
发布工件时,.jar文件应包含mycorp/myproject
个文件夹Test.class
和<{1}}文件夹。
将.jar添加到第二个项目的依赖项后,将Test$.class
导入另一个类应该如下所示:
Test
我希望这会有所帮助。
结束更新