首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中使用Google Caliper

在Scala中使用Google Caliper
EN

Stack Overflow用户
提问于 2013-01-09 23:16:28
回答 3查看 1.3K关注 0票数 0

我正尝试在Eclipse Juno(4.2)中将Caliper与Scala(2.10)一起使用。首先,我设置了一个基准测试,它只是在数组上迭代foreachloop。

代码语言:javascript
复制
import com.google.caliper.Param
import com.google.caliper.SimpleBenchmark

class Benchmark extends SimpleBenchmark {

  @Param(Array("10", "100", "1000", "10000"))
  val length: Int = 0
  var array: Array[Int] = _

  override def setUp() {
    array = new Array(length)
  }

  def timeForeach(reps: Int) = {
    var result = 0
    array.foreach {
      result += _
    }
    result
  }

当我开始基准测试时:

代码语言:javascript
复制
object myRunner {
 def main(args: Array[String]) {
   Runner.main(classOf[Benchmark], args)
 }
}

我得到了一些我不理解的例外

代码语言:javascript
复制
0% Scenario{vm=java, trial=0, benchmark=Foreach, length=10}  Failed to execute java -cp C:\Users\bob\workspace\myBenchmark\bin;C:\Users\bob\workspace\caliper\caliper\target>\classes;C:\Users\bob\workspace\caliper\caliper\target\test-classes;C:\Users\bob\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\bob\.m2\repository\com\google\code\gson\gson\1.7.1\gson-1.7.1.jar;C:\Users\bob\.m2\repository\com\google\guava\guava\11.0.1\guava-11.0.1.jar;C:\Users\bob\.m2\repository\com\google\code\java-allocation-instrumenter\java-allocation-instrumenter\2.0\java-allocation-instrumenter-2.0.jar;C:\Users\bob\.m2\repository\asm\asm\3.3.1\asm-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-analysis\3.3.1\asm-analysis-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-commons\3.3.1\asm-commons-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-tree\3.3.1\asm-tree-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-util\3.3.1\asm-util-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-xml\3.3.1\asm-xml-3.3.1.jar;C:\Users\bob\.m2\repository\junit\junit\3.8.2\junit-3.8.2.jar com.google.caliper.InProcessRunner --warmupMillis 3000 --runMillis 1000 --measurementType TIME --marker //ZxJ/ -Dbenchmark=Foreach -Dlength=10 org.example.Benchmark
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.google.caliper.ScenarioSelection.getClassByName(ScenarioSelection.java:154)
    at com.google.caliper.ScenarioSelection.prepareSuite(ScenarioSelection.java:123)
    at com.google.caliper.ScenarioSelection.select(ScenarioSelection.java:83)
    at com.google.caliper.InProcessRunner.run(InProcessRunner.java:38)
    at com.google.caliper.InProcessRunner.main(InProcessRunner.java:103)
Caused by: java.lang.ClassNotFoundException: scala.Function1
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

An exception was thrown from the benchmark code.
com.google.caliper.ConfigurationException: Failed to execute java -cp C:\Users\bob\workspace\myBenchmark\bin;C:\Users\bob\workspace\caliper\caliper\target\classes;C:\Users\bob\workspace\caliper\caliper\target\test-classes;C:\Users\bob\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\bob\.m2\repository\com\google\code\gson\gson\1.7.1\gson-1.7.1.jar;C:\Users\bob\.m2\repository\com\google\guava\guava\11.0.1\guava-11.0.1.jar;C:\Users\bob\.m2\repository\com\google\code\java-allocation-instrumenter\java-allocation-instrumenter\2.0\java-allocation-instrumenter-2.0.jar;C:\Users\bob\.m2\repository\asm\asm\3.3.1\asm-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-analysis\3.3.1\asm-analysis-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-commons\3.3.1\asm-commons-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-tree\3.3.1\asm-tree-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-util\3.3.1\asm-util-3.3.1.jar;C:\Users\bob\.m2\repository\asm\asm-xml\3.3.1\asm-xml-3.3.1.jar;C:\Users\bob\.m2\repository\junit\junit\3.8.2\junit-3.8.2.jar com.google.caliper.InProcessRunner --warmupMillis 3000 --runMillis 1000 --measurementType TIME --marker //ZxJ/ -Dbenchmark=Foreach -Dlength=10 org.example.Benchmark
    at com.google.caliper.Runner.measure(Runner.java:309)
    at com.google.caliper.Runner.runScenario(Runner.java:229)
    at com.google.caliper.Runner.runOutOfProcess(Runner.java:378)
    at com.google.caliper.Runner.run(Runner.java:97)
    at com.google.caliper.Runner.main(Runner.java:423)
    at com.google.caliper.Runner.main(Runner.java:436)
    at org.example.myRunner$.main(myRunner.scala:7)
    at org.example.myRunner.main(myRunner.scala)

我想我对类路径有一些问题,但我不确定。

我希望有人能帮助我:)

预先感谢Davram Bashere

EN

回答 3

Stack Overflow用户

发布于 2013-01-10 00:38:36

它看起来就像Caliper正在运行一个新的JVM,并且不知道它需要在类路径中包含Scala库。

This question描述了如何在命令行上使用java命令运行Scala应用程序。这应该是解决这个问题的一个很好的起点。

票数 2
EN

Stack Overflow用户

发布于 2013-08-26 01:57:14

即使您在Eclipse中编辑scala源代码,您仍然可以使用sbt来运行代码。Sbt是一个管理项目类路径的很好的工具,除了提供一个插件系统来提供运行Caliper基准测试之类的功能。我最近参与了一个项目,其中我正好需要它,并将其分解到一个已发布的sbt plugin中。这也可能对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-01-15 17:00:06

谢谢你的帮助。正如所料,问题出在愚蠢的类路径上。我已经从googlecode下载了caliper项目,并添加了scala依赖项。现在,我已经构建了自己的带有依赖项的jar,它工作得很好。

无论如何,还是要感谢你的回答:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14238435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档