在Scala中导入 - 如何永久地将jar添加到类路径中

时间:2014-05-26 23:24:40

标签: scala import package sbt scala-breeze

所以我在scala中导入包时遇到问题。我从github下载了包breeze,因为我想从概率分布中抽样。

我习惯使用Python,我可以在其中下载一个包,将其包含在路径中,然后将其导入代码中。因此,我对使用单独的构建工具"的想法非常陌生。使用第三方包。

所以我下载了#34;微风"来自github的源代码,安装了sbt,然后在微风的源代码中,我运行了sbt,然后我使用了"程序集"命令获得微风的.jar。

如果我想使用scala解释器,我可以使用

导入包
   scala -cp breeze-master/target/scala-2.11/breeze-parent-assembly-0.8.jar

问题是我想在一个单独的代码中使用这个包,我在一个名为Chromosome.scala的文件中写。当我尝试导入包时(如下所示),我收到错误:

    error: not found: object breeze

这是我的代码:

// Chromosome.scala

import breeze.stats.distributions._

class Chromosome(s:Int, bitstring:Array[Boolean]) {
  val size:Int = s;
  val dna:Array[Boolean] = bitstring;
  var fitness:Int = 0;

  def mutate(prob:Float):Unit = {
    // This method will randomly "mutate" the dna sequence by flipping a bit.
    // Any individual bit may be flipped with probability 'pm', usually small.

    val pm:Float = prob;

    // The variable bern is an instance of a Bernoulli random variable,
    // whose probability parameter is equal to 'pm'.
    var bern = new Bernoulli(pm);

    //Loop through the 'dna' array and flip each bit with probability pm.
    for (i <- 0 to (size - 1)) {
      var flip = bern.draw();
      if (flip) {
        dna(i) = !(dna(i));
      }
    }
  }

2 个答案:

答案 0 :(得分:1)

“脚本?”这是什么以及它与您的SBT项目的联系是什么? Scala脚本包含自己的Scala解释器/编译器启动命令(/ REPL ...)。如果你想访问标准库之外的东西,你必须在那里包含它们。或者,您可以使用SBT Start Script plug-in生成一个包含项目依赖项的启动器脚本。它只能在本地工作,但您可以编写一些文本处理和其他shell脚本来生成便携式启动包。

答案 1 :(得分:0)

看起来对于sbt应该为你做什么有一些可以理解的混淆。

首先,您通常不需要从github下载包并从源代码构建它。在您执行的极少数情况下(例如,当您需要未将其作为库的版本的功能时),sbt可以处理繁重的工作。

相反,你告诉sbt关于你正在构建的项目(包括它的依赖项),sbt将下载它们,编译代码,并为scala解释器设置运行时类路径(在无数的其他构建中)相关的任务)。

只需关注the directions on the breeze wiki即可。具体来说,在项目的根文件夹中创建一个build.sbt文件并将其复制到其中:

libraryDependencies  ++= Seq(
            // other dependencies here
            "org.scalanlp" % "breeze_2.10" % "0.7",
            // native libraries are not included by default. add this if you want them (as of 0.7)
            // native libraries greatly improve performance, but increase jar sizes.
            "org.scalanlp" % "breeze-natives_2.10" % "0.7",
)

resolvers ++= Seq(
            // other resolvers here
            // if you want to use snapshot builds (currently 0.8-SNAPSHOT), use this.
            "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
            "Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/"
)

// Scala 2.9.2 is still supported for 0.2.1, but is dropped afterwards.
// Don't use an earlier version of 2.10, you will probably get weird compiler crashes.
scalaVersion := "2.10.3"

将您的来源放入相应的文件夹(默认情况下为src/main/scala)并运行sbt console。此命令将下载依赖项,编译代码并启动Scala解释器。此时,您应该能够与您的班级进行互动。