scala创建并使用本地库

时间:2018-05-03 00:22:42

标签: scala sbt

我正在尝试创建一个包含类

的本地库

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

我找不到错误。我确定我错过了一些简单的东西,但它让我疯狂。

1 个答案:

答案 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

我希望这会有所帮助。

结束更新