无法在 JRuby 中访问 Scala 的 Akka 库
Unable to access Scala's Akka libraries in JRuby
我正在使用 jruby 1.7.12 (1.9.3p392)
,我想利用 Scala Akka 库。我知道 Mikka gem,但我想手动执行此操作。
我已经从 http://akka.io/downloads/ 下载了 Akka 库“2.3.8”(特别是 link "Akka 2.3.8 distribution for Scala 2.11")。
下面是文件结构(一个app.rb
JRuby文件,其余是下载的Akka库)...
├── akka-2.3.8
| ├── bin
| ├── config
| ├── deploy
| ├── doc
│ ├── lib
│ │ ├── akka
│ │ │ ├── akka-actor_2.11-2.3.8.jar
│ │ │ ├── akka-agent_2.11-2.3.8.jar
│ │ │ ├── akka-camel_2.11-2.3.8.jar
│ │ │ ├── akka-cluster_2.11-2.3.8.jar
│ │ │ ├── akka-contrib_2.11-2.3.8.jar
│ │ │ ├── akka-dataflow_2.11-2.3.8.jar
│ │ │ ├── akka-durable-mailboxes-2.3.8.jar
│ │ │ ├── akka-file-mailbox_2.11-2.3.8.jar
│ │ │ ├── akka-kernel_2.11-2.3.8.jar
│ │ │ ├── akka-mailboxes-common_2.11-2.3.8.jar
│ │ │ ├── akka-multi-node-testkit_2.11-2.3.8.jar
│ │ │ ├── akka-persistence-experimental_2.11-2.3.8.jar
│ │ │ ├── akka-persistence-tck-experimental_2.11-2.3.8.jar
│ │ │ ├── akka-remote-tests_2.11-2.3.8.jar
│ │ │ ├── akka-remote_2.11-2.3.8.jar
│ │ │ ├── akka-slf4j_2.11-2.3.8.jar
│ │ │ ├── akka-testkit_2.11-2.3.8.jar
│ │ │ ├── akka-transactor_2.11-2.3.8.jar
│ │ │ ├── akka-zeromq_2.11-2.3.8.jar
│ │ │ ├── camel-core-2.10.3.jar
│ │ │ ├── config-1.2.1.jar
│ │ │ ├── guava-12.0.jar
│ │ │ ├── hamcrest-core-1.3.jar
│ │ │ ├── hawtjni-runtime-1.8.jar
│ │ │ ├── jna-3.0.9.jar
│ │ │ ├── jnr-constants-0.8.2.jar
│ │ │ ├── jsr305-1.3.9.jar
│ │ │ ├── junit-4.11.jar
│ │ │ ├── leveldb-0.5.jar
│ │ │ ├── leveldb-api-0.5.jar
│ │ │ ├── leveldbjni-1.7.jar
│ │ │ ├── leveldbjni-all-1.7.jar
│ │ │ ├── leveldbjni-linux32-1.5.jar
│ │ │ ├── leveldbjni-linux64-1.5.jar
│ │ │ ├── leveldbjni-osx-1.5.jar
│ │ │ ├── leveldbjni-win32-1.5.jar
│ │ │ ├── leveldbjni-win64-1.5.jar
│ │ │ ├── netty-3.8.0.Final.jar
│ │ │ ├── protobuf-java-2.5.0.jar
│ │ │ ├── scala-continuations-library_2.11-1.0.2.jar
│ │ │ ├── scala-reflect-2.11.0.jar
│ │ │ ├── scala-stm_2.11-0.7.jar
│ │ │ ├── scalatest_2.11-2.1.3.jar
│ │ │ ├── slf4j-api-1.7.5.jar
│ │ │ ├── uncommons-maths-1.2.2a.jar
│ │ │ └── zeromq-scala-binding_2.11-0.0.7-spark.jar
│ │ └── scala-library-2.11.4.jar
│ └── src
│ └── akka
│ ├── akka-actor_2.11-2.3.8-sources.jar
│ ├── akka-agent_2.11-2.3.8-sources.jar
│ ├── akka-camel_2.11-2.3.8-sources.jar
│ ├── akka-cluster_2.11-2.3.8-sources.jar
│ ├── akka-contrib_2.11-2.3.8-sources.jar
│ ├── akka-dataflow_2.11-2.3.8-sources.jar
│ ├── akka-durable-mailboxes-2.3.8-sources.jar
│ ├── akka-file-mailbox_2.11-2.3.8-sources.jar
│ ├── akka-kernel_2.11-2.3.8-sources.jar
│ ├── akka-mailboxes-common_2.11-2.3.8-sources.jar
│ ├── akka-multi-node-testkit_2.11-2.3.8-sources.jar
│ ├── akka-persistence-experimental_2.11-2.3.8-sources.jar
│ ├── akka-persistence-tck-experimental_2.11-2.3.8-sources.jar
│ ├── akka-remote-tests_2.11-2.3.8-sources.jar
│ ├── akka-remote_2.11-2.3.8-sources.jar
│ ├── akka-slf4j_2.11-2.3.8-sources.jar
│ ├── akka-testkit_2.11-2.3.8-sources.jar
│ ├── akka-transactor_2.11-2.3.8-sources.jar
│ └── akka-zeromq_2.11-2.3.8-sources.jar
└── app.rb
app.rb
文件的内容是...
require "java"
$CLASSPATH << "akka-2.3.8"
$: << File.join(File.dirname(__FILE__), "akka-2.3.8")
java_import java.lang.System
java_import "akka.actor.ActorRegistry"
java_import "akka.actor.Actors"
java_import "akka.actor.UntypedActor"
...我很欣赏(在 JRuby 中)$CLASSPATH
和加载路径 $:
已映射,但我想我会尝试两者。
运行 app.rb
导致以下错误(导入 java.lang.System
没问题, akka.actor.ActorRegistry
是第一行中断)...
NameError: cannot load Java class akka.actor.ActorRegistry
for_name at org/jruby/javasupport/JavaClass.java:1250
get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
java_import at file:/Users/markmcdonnell/.rubies/jruby-1.7.12/lib/jruby.jar!/jruby/java/core_ext/object.rb:26
map at org/jruby/RubyArray.java:2409
java_import at file:/Users/markmcdonnell/.rubies/jruby-1.7.12/lib/jruby.jar!/jruby/java/core_ext/object.rb:22
(root) at size.rb:7
这里有什么问题。我没有下载正确的文件还是没有正确引用它们?
也许 <<
没有将所有单独的 jar 添加到类路径中?您可能需要寻找其他东西来包含 lib 和 lib/akka 中的所有 jar。不幸的是,我对 JRuby 了解不够,无法告诉您如何去做。
此外:您正在导入 Akka 2.3.8 中不存在的 类(ActorRegistry、Actor)。请检查最新的 API 文档,并确保您没有尝试使用 Akka 1.x 示例(正如 ActorRegistry 所指出的那样)。
因此,以下内容似乎可行,也许您可以以此为起点:
require "java"
$CLASSPATH << "akka-2.3.8/lib/scala-library-2.11.4.jar"
$CLASSPATH << "akka-2.3.8/lib/akka/akka-actor_2.11-2.3.8.jar"
$CLASSPATH << "akka-2.3.8/lib/akka/config-1.2.1.jar"
java_import java.lang.System
java_import "akka.actor.ActorRef"
java_import "akka.actor.ActorSystem"
java_import "akka.actor.Props"
java_import "akka.actor.UntypedActor"
我正在使用 jruby 1.7.12 (1.9.3p392)
,我想利用 Scala Akka 库。我知道 Mikka gem,但我想手动执行此操作。
我已经从 http://akka.io/downloads/ 下载了 Akka 库“2.3.8”(特别是 link "Akka 2.3.8 distribution for Scala 2.11")。
下面是文件结构(一个app.rb
JRuby文件,其余是下载的Akka库)...
├── akka-2.3.8
| ├── bin
| ├── config
| ├── deploy
| ├── doc
│ ├── lib
│ │ ├── akka
│ │ │ ├── akka-actor_2.11-2.3.8.jar
│ │ │ ├── akka-agent_2.11-2.3.8.jar
│ │ │ ├── akka-camel_2.11-2.3.8.jar
│ │ │ ├── akka-cluster_2.11-2.3.8.jar
│ │ │ ├── akka-contrib_2.11-2.3.8.jar
│ │ │ ├── akka-dataflow_2.11-2.3.8.jar
│ │ │ ├── akka-durable-mailboxes-2.3.8.jar
│ │ │ ├── akka-file-mailbox_2.11-2.3.8.jar
│ │ │ ├── akka-kernel_2.11-2.3.8.jar
│ │ │ ├── akka-mailboxes-common_2.11-2.3.8.jar
│ │ │ ├── akka-multi-node-testkit_2.11-2.3.8.jar
│ │ │ ├── akka-persistence-experimental_2.11-2.3.8.jar
│ │ │ ├── akka-persistence-tck-experimental_2.11-2.3.8.jar
│ │ │ ├── akka-remote-tests_2.11-2.3.8.jar
│ │ │ ├── akka-remote_2.11-2.3.8.jar
│ │ │ ├── akka-slf4j_2.11-2.3.8.jar
│ │ │ ├── akka-testkit_2.11-2.3.8.jar
│ │ │ ├── akka-transactor_2.11-2.3.8.jar
│ │ │ ├── akka-zeromq_2.11-2.3.8.jar
│ │ │ ├── camel-core-2.10.3.jar
│ │ │ ├── config-1.2.1.jar
│ │ │ ├── guava-12.0.jar
│ │ │ ├── hamcrest-core-1.3.jar
│ │ │ ├── hawtjni-runtime-1.8.jar
│ │ │ ├── jna-3.0.9.jar
│ │ │ ├── jnr-constants-0.8.2.jar
│ │ │ ├── jsr305-1.3.9.jar
│ │ │ ├── junit-4.11.jar
│ │ │ ├── leveldb-0.5.jar
│ │ │ ├── leveldb-api-0.5.jar
│ │ │ ├── leveldbjni-1.7.jar
│ │ │ ├── leveldbjni-all-1.7.jar
│ │ │ ├── leveldbjni-linux32-1.5.jar
│ │ │ ├── leveldbjni-linux64-1.5.jar
│ │ │ ├── leveldbjni-osx-1.5.jar
│ │ │ ├── leveldbjni-win32-1.5.jar
│ │ │ ├── leveldbjni-win64-1.5.jar
│ │ │ ├── netty-3.8.0.Final.jar
│ │ │ ├── protobuf-java-2.5.0.jar
│ │ │ ├── scala-continuations-library_2.11-1.0.2.jar
│ │ │ ├── scala-reflect-2.11.0.jar
│ │ │ ├── scala-stm_2.11-0.7.jar
│ │ │ ├── scalatest_2.11-2.1.3.jar
│ │ │ ├── slf4j-api-1.7.5.jar
│ │ │ ├── uncommons-maths-1.2.2a.jar
│ │ │ └── zeromq-scala-binding_2.11-0.0.7-spark.jar
│ │ └── scala-library-2.11.4.jar
│ └── src
│ └── akka
│ ├── akka-actor_2.11-2.3.8-sources.jar
│ ├── akka-agent_2.11-2.3.8-sources.jar
│ ├── akka-camel_2.11-2.3.8-sources.jar
│ ├── akka-cluster_2.11-2.3.8-sources.jar
│ ├── akka-contrib_2.11-2.3.8-sources.jar
│ ├── akka-dataflow_2.11-2.3.8-sources.jar
│ ├── akka-durable-mailboxes-2.3.8-sources.jar
│ ├── akka-file-mailbox_2.11-2.3.8-sources.jar
│ ├── akka-kernel_2.11-2.3.8-sources.jar
│ ├── akka-mailboxes-common_2.11-2.3.8-sources.jar
│ ├── akka-multi-node-testkit_2.11-2.3.8-sources.jar
│ ├── akka-persistence-experimental_2.11-2.3.8-sources.jar
│ ├── akka-persistence-tck-experimental_2.11-2.3.8-sources.jar
│ ├── akka-remote-tests_2.11-2.3.8-sources.jar
│ ├── akka-remote_2.11-2.3.8-sources.jar
│ ├── akka-slf4j_2.11-2.3.8-sources.jar
│ ├── akka-testkit_2.11-2.3.8-sources.jar
│ ├── akka-transactor_2.11-2.3.8-sources.jar
│ └── akka-zeromq_2.11-2.3.8-sources.jar
└── app.rb
app.rb
文件的内容是...
require "java"
$CLASSPATH << "akka-2.3.8"
$: << File.join(File.dirname(__FILE__), "akka-2.3.8")
java_import java.lang.System
java_import "akka.actor.ActorRegistry"
java_import "akka.actor.Actors"
java_import "akka.actor.UntypedActor"
...我很欣赏(在 JRuby 中)$CLASSPATH
和加载路径 $:
已映射,但我想我会尝试两者。
运行 app.rb
导致以下错误(导入 java.lang.System
没问题, akka.actor.ActorRegistry
是第一行中断)...
NameError: cannot load Java class akka.actor.ActorRegistry
for_name at org/jruby/javasupport/JavaClass.java:1250
get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
java_import at file:/Users/markmcdonnell/.rubies/jruby-1.7.12/lib/jruby.jar!/jruby/java/core_ext/object.rb:26
map at org/jruby/RubyArray.java:2409
java_import at file:/Users/markmcdonnell/.rubies/jruby-1.7.12/lib/jruby.jar!/jruby/java/core_ext/object.rb:22
(root) at size.rb:7
这里有什么问题。我没有下载正确的文件还是没有正确引用它们?
也许 <<
没有将所有单独的 jar 添加到类路径中?您可能需要寻找其他东西来包含 lib 和 lib/akka 中的所有 jar。不幸的是,我对 JRuby 了解不够,无法告诉您如何去做。
此外:您正在导入 Akka 2.3.8 中不存在的 类(ActorRegistry、Actor)。请检查最新的 API 文档,并确保您没有尝试使用 Akka 1.x 示例(正如 ActorRegistry 所指出的那样)。
因此,以下内容似乎可行,也许您可以以此为起点:
require "java"
$CLASSPATH << "akka-2.3.8/lib/scala-library-2.11.4.jar"
$CLASSPATH << "akka-2.3.8/lib/akka/akka-actor_2.11-2.3.8.jar"
$CLASSPATH << "akka-2.3.8/lib/akka/config-1.2.1.jar"
java_import java.lang.System
java_import "akka.actor.ActorRef"
java_import "akka.actor.ActorSystem"
java_import "akka.actor.Props"
java_import "akka.actor.UntypedActor"