我有一个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'项目的测试代码中重用我的模拟?
我正在尝试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) 我想通过反射选择正确的通用方法,然后调用它.
通常这很容易.例如
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'方法的正确版本?
我正在尝试从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容器?
我想知道为什么当我通过"_"作为完成结果时,"没什么"的承诺永远不会完成.当我想使用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决赛跑了这个.
使用远程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) 代码应该打印什么?0或任何垃圾值还是取决于编译器?
#include <stdio.h>
int a;
int main()
{
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)