代码之家  ›  专栏  ›  技术社区  ›  Brian

scala创建和使用本地库

  •  1
  • Brian  · 技术社区  · 6 年前

    我正在尝试创建一个包含类的本地库

    我的项目。scala公司:

    object test {
        def info(message: String): Unit = println(s"INFO: $message")
    }
    

    建筑sbt:

    name := "MyProject"
    version := "0.1"
    organization := "MyCorp"
    scalaVersion := "2.11.0"
    sbtVersion := "0.13"
    

    我运行了sbt clean compile publishLocal,在本地ivy2目录中看到了jar。我不确定的是现在如何在另一个项目中使用该库。

    我是否添加了 libraryDependencies += "MyCorp"%"myproject_2.11"%"0.1" 到第二个项目的sbt,当我在repl中打印出来时,我在类路径中看到它。问题是当我尝试 导入MyCorp。我的项目

    我得到一个找不到的错误。我肯定我错过了一些简单的东西,但这让我抓狂。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Antot    6 年前

    我运行了sbt clean compile,在本地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。我的项目。测试,但我尝试了所有可能的组合@布莱恩

    在评论之后,我认为项目中仍然应该存在一些错误配置和/或描述中缺少的内容。

    假设有一个文件 {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 Test$.class 文件。

    添加后。jar到第二个项目的依赖项,导入 Test 进入另一个类应该如下所示:

    package mycorp.myproject2
    
    import mycorp.myproject.Test
    
    object AnotherTest extends App {
    
      Test.info("hello")
    
    }
    

    我希望这有帮助。

    更新结束