小编Gam*_*lor的帖子

多项目中的SBT测试依赖性:使测试代码可用于相关项目

我有一个SBT多项目,其中一些项目彼此依赖.像这样:

 lazy val coreProject: Project = Project(
    id = "core-project",
    base = file("./core-project"),
    // other stuff
    ))

  lazy val extensions: Project = Project(
    id = "extensions",
    base = file("./extensions"),
    dependencies = Seq(coreProject)
  )
Run Code Online (Sandbox Code Playgroud)

现在我在test-folder的'core'项目中有一些测试代码.还有模拟和测试实用程序之类的东西.现在我想在扩展的测试中使用这些测试实用程序.对于生产代码,这是有效的,因为我已经声明了依赖.然而,似乎依赖性不适用于测试.当我运行测试时,我得到了缺少类的编译错误.这些类来自核心项目中的测试代码.

如何告诉sbt依赖项还应该包含测试范围的测试代码?这样我可以在'exension'项目的测试代码中重用我的模拟?

testing scala sbt

72
推荐指数
2
解决办法
1万
查看次数

Cassandra服务器抛出java.lang.AssertionError:DecoratedKey(...)!= DecoratedKey

我正在尝试Cassandra.

在客户端(使用Hector),我查找了几个这样的键:

ColumnFamilyResult<String, String> result = template.queryColumns(Arrays.asList("key1","key2","key3"));
Run Code Online (Sandbox Code Playgroud)

大部分时间似乎都有效.但有时我在客户端上遇到超时异常:

Caused by: me.prettyprint.hector.api.exceptions.HTimedOutException: TimedOutException()
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:35)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:100)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:88)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate.sliceInternal(ThriftColumnFamilyTemplate.java:88)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate.doExecuteSlice(ThriftColumnFamilyTemplate.java:46)
    at me.prettyprint.cassandra.service.template.ColumnFamilyTemplate.queryColumns(ColumnFamilyTemplate.java:113)
    at info.gamlor.experiments.Cassandra.readObjectByKey(ComplexCassandra.java:255)

Caused by: TimedOutException()
    at org.apache.cassandra.thrift.Cassandra$get_slice_result.read(Cassandra.java:7772)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_get_slice(Cassandra.java:570)
    at org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:542)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:95)
Run Code Online (Sandbox Code Playgroud)

在服务器上,此异常显示:

ERROR 11:33:55,312 Exception in thread Thread[ReadStage:91,5,main]
java.lang.AssertionError: DecoratedKey(4948402862350542345439897754126541659, 6932) != DecoratedKey(132475956107784875457507977471906551877, 726f6f74) in C:\tem
p\cassandra\lib\cassandra\data\CassandraPolepos\ComplexObjects\CassandraPolepos-ComplexObjects-hd-2-Data.db
        at org.apache.cassandra.db.columniterator.SSTableSliceIterator.<init>(SSTableSliceIterator.java:58)
        at org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:66)
        at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:78)
        at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:256)
        at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:63)
        at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1331)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1193)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1128)
        at org.apache.cassandra.db.Table.getRow(Table.java:378)
        at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:69)
        at …
Run Code Online (Sandbox Code Playgroud)

cassandra hector

59
推荐指数
1
解决办法
2993
查看次数

选择具有反射的右通用方法

我想通过反射选择正确的通用方法,然后调用它.

通常这很容易.例如

var method = typeof(MyType).GetMethod("TheMethod");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
Run Code Online (Sandbox Code Playgroud)

但是,当方法存在不同的泛型重载时,问题就开始了.例如,System.Linq.Queryable类中的静态方法.'Where'方法有两种定义

static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,bool>> predicate)
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,int,bool>> predicate)
Run Code Online (Sandbox Code Playgroud)

这说明GetMethod无法正常工作,因为它无法让两者黯然失色.因此,我想选择正确的.

到目前为止,我经常只采取第一种或第二种方法,这取决于我的需要.像这样:

var method = typeof (Queryable).GetMethods().First(m => m.Name == "Where");
var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
Run Code Online (Sandbox Code Playgroud)

但是我对此并不满意,因为我做了一个很大的假设,即第一种方法是正确的.我宁愿通过参数类型找到正确的方法.但我无法弄清楚如何.

我尝试传递'类型',但它没有用.

        var method = typeof (Queryable).GetMethod(
            "Where", BindingFlags.Static,
            null,
            new Type[] {typeof (IQueryable<T>), typeof (Expression<Func<T, bool>>)},
            null);
Run Code Online (Sandbox Code Playgroud)

所以有人知道如何通过反射找到'正确'的通用方法.例如,Queryable类的'Where'方法的正确版本?

c# reflection

34
推荐指数
4
解决办法
1万
查看次数

尝试运行OSGi调试目标时,支持"不支持平台"

我正在尝试从IntelliJ Idea运行一个小型的OSGi项目.我在Idea的OSGi配置部分添加了Equinox容器.然后我将OSGi方面添加到项目中.到目前为止,一切看起来都不错.

但是,一旦我尝试运行该项目,我就会遇到麻烦.我使用IntelliJ Idea的'OSGi Bundles'跑步者.在那里,我选择我的项目包和OSGi容器并运行它.这个问题开始了.我总是出现同样的错误信息:

             ___
            /  /
           /  / Oops, there has been a problem!
          /  /  
         /__/   Platform [platform.felix 3.0.6] is not supported
        ___
       /__/     

     -> Exception caught during execution:
    org.ops4j.pax.runner.ConfigurationException: Platform [platform.felix 3.0.6] is not supported
        at org.ops4j.pax.runner.Run.installPlatform(Run.java:611)
        at org.ops4j.pax.runner.Run.start(Run.java:221)
        at org.ops4j.pax.runner.Run.main(Run.java:148)
        at org.ops4j.pax.runner.Run.main(Run.java:121)
Run Code Online (Sandbox Code Playgroud)

我试图使用其他OSGi容器,如Felix或Knopflerfish,并遇到同样的问题.有谁知道我做错了什么.或者IntelliJ支持哪些版本的OSGi容器?

osgi intellij-idea pax-runner

5
推荐指数
1
解决办法
1425
查看次数

"没什么"的承诺永远不会完成?

我想知道为什么当我通过"_"作为完成结果时,"没什么"的承诺永远不会完成.当我想使用Promise来表示事情已经完成时,我碰到了这个:

  val promiseWillFinish = Promise()
  promiseWillFinish.success(_)
  // will time out
  Await.ready(promiseWillFinish, 5 seconds)
  // will return false
  println(promiseWillFinish.isCompleted)
Run Code Online (Sandbox Code Playgroud)

现在我正在使用一个单位的承诺,它工作正常,也更清晰一点.但我仍然想知道上面的代码在超时/未完成的Promise中结束了.

我用Akka 2.0决赛跑了这个.

scala promise akka

4
推荐指数
1
解决办法
1235
查看次数

回复不会传回"客户"演员

使用远程actor时我有一个意想不到的行为.我有一个服务器和一个'客户'.客户端向服务器actor发送消息,服务器回复.当我使用'?' 操作员一切按预期工作.我从服务器上得到答案.

服务器:

class HelloWorldActor extends Actor {
  def receive = {
    case msg => self reply (msg + " World")
  }
}

object Server extends App{
  Actor.remote.start("localhost",2552);
  Actor.remote.register("hello-service",Actor.actorOf[HelloWorldActor])
}
Run Code Online (Sandbox Code Playgroud)

客户端:

object Client extends App {
  // client code
  val actor = remote.actorFor(
    "hello-service", "localhost", 2552)
  val result = (actor ? "Hello").as[String]
  println(result)
}
Run Code Online (Sandbox Code Playgroud)

现在我更改了代码,以便客户端是一个演员,只是对答案作出反应.但是,不会将回复发送回客户端.而是在服务器上创建一个'ClientActor'实例并在那里发送回复?

修改后的客户端:

class ClientActor extends Actor {
  def receive = {
    case "Ask" =>{
      val actor = remote.actorFor(
        "hello-service", "localhost", 2552)
      actor ! "Hello"
    }
    case …
Run Code Online (Sandbox Code Playgroud)

scala remote-actors actor akka

2
推荐指数
1
解决办法
323
查看次数

什么printf打印单位变量?

代码应该打印什么?0或任何垃圾值还是取决于编译器?

#include <stdio.h>
int a;
int main() 
{ 
   printf("%d\n",a);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c global

-1
推荐指数
1
解决办法
221
查看次数