Я использую библиотеку org.zeromq java для ZMQ, и он отлично работает в области развертывания и когда я запускаю тесты внутри IntelliJ, но если я попробую запустить тот же тест через SBT из командной строки на той же машине, он терпит неудачу с:Опрос ZMQ работает в приложении и тестируется в IntelliJ, но сбой под sbt/scalatest
java.lang.AbstractMethodError: com.sun.jna.Structure.getFieldOrder()Ljava/util/List;
at com.sun.jna.Structure.fieldOrder(Structure.java:868) ~[jna-4.0.0.jar:4.0.0 (b2)]
... (8 lines omitted)
at org.zeromq.zmq_msg_t.<init>(zmq_msg_t.java:21) ~[zeromq-scala-binding_2.10-0.0.7.jar:0.0.7]
at org.zeromq.ZMQ$Socket.newZmqMessage(ZMQ.java:453) ~[zeromq-scala-binding_2.10-0.0.7.jar:0.0.7]
at org.zeromq.ZMQ$Socket.send(ZMQ.java:368) ~[zeromq-scala-binding_2.10-0.0.7.jar:0.0.7]
где тест просто:
class ZeroMQSpec extends FlatSpec with Matchers with LazyLogging {
"zeroMQ" should "be able to just send something" in {
val context = ZMQ.context(1)
val socket = context.socket(ZMQ.PAIR)
socket.bind("inproc://zmqtest")
logger.debug("start polling")
try {
socket.send(Array[Byte](1, 2), 0)
logger.debug("done polling")
} catch {
case e: Throwable => logger.error("ZMQ failed", e)
}
}
send
это всего лишь пример. То же самое происходит для recv
или poll
.
Поскольку тот же тест проходит при запуске под IntelliJ на том же компьютере, и ZMQ также работает в производственном коде, он, похоже, не связан с установленным ZMQ, а скорее как JVM связывается с ним. К сожалению, я не знаю, как продолжить устранение этого.
Update
Движимые @cdshines вопрос, я смотрел на то, что ЮНА потребности в пути к классам, чтобы работать и идти по this, мне нужно platform.jar и jna.jar. В IntelliJ они оба из моего кеша плюща:
file:/Users/arne/.ivy2/cache/net.java.dev.jna/jna/jars/jna-3.0.9.jar
file:/Users/arne/.ivy2/cache/net.java.dev.jna/jna/jars/jna-4.0.0.jar
file:/Users/arne/.ivy2/cache/net.java.dev.jna/platform/jars/platform-3.4.0.jar
, который я считаю, SBT также должен решить. Так как это не так, есть ли способ заставить SBT сделать это?
Update 2
Добавлено
"net.java.dev.jna" % "jna" % "4.0.0" % "test",
"net.java.dev.jna" % "jna-platform" % "4.0.0" % "test",
моих зависимостей. Нет изменений в поведении
Можете ли вы опубликовать путь к классам для обоих случаев? – tkroman
Я использую 'ClassLoader.getSystemClassLoader' для доступа к пути к классам, а в IntelliJ он выводит то, что я ожидаю, но под sbt он просто печатает' файл: /usr/local/Cellar/sbt/0.13.5/libexec/sbt-launch.jar', который не может быть прав, поскольку все работает. Есть ли другой способ определить путь к классам? –