Запуск Corda jar: адрес уже используется: ошибка привязки

У меня есть прекрасно работающее приложение Corda в Kotlin - оно запускается и нормально работает при запуске из IDE

Но когда я пытаюсь создать его как файл jar, он вылетает со следующей ошибкой


    INFO: Booting SSHD 
    INFO 11, 2019 8:28:27 PM org.crsh.ssh.SSHPlugin init 
    INFO: Booting SSHD 
    INFO 11, 2019 8:28:28 PM org.crsh.ssh.term.SSHLifeCycle init 
    INFO: About to start CRaSSHD 
    INFO 11, 2019 8:28:28 PM org.crsh.ssh.term.SSHLifeCycle init 
    INFO: About to start CRaSSHD 
    INFO 11, 2019 8:28:28 PM org.crsh.ssh.term.SSHLifeCycle init 
    SEVERE: Could not start CRaSSHD 
    java.net.BindException: Address already in use: bind 
    at sun.nio.ch.Net.bind0(Native Method) 
    at sun.nio.ch.Net.bind(Unknown Source) 
    at sun.nio.ch.Net.bind(Unknown Source) 
    at sun.nio.ch.AsynchronousServerSocketChannelImpl.bind(Unknown Source) 
    at org.apache.sshd.common.io.nio2.Nio2Acceptor.bind(Nio2Acceptor.java:63) 
    at org.apache.sshd.common.io.nio2.Nio2Acceptor.bind(Nio2Acceptor.java:87) 
    at org.apache.sshd.server.SshServer.start(SshServer.java:325) 
    at org.crsh.ssh.term.SSHLifeCycle.init(SSHLifeCycle.java:182) 
    at org.crsh.ssh.SSHPlugin.init(SSHPlugin.java:192) 
    at org.crsh.plugin.PluginManager.getPlugins(PluginManager.java:83) 
    at org.crsh.plugin.PluginContext.start(PluginContext.java:327) 
    at org.crsh.plugin.PluginLifeCycle.start(PluginLifeCycle.java:104) 
    at net.corda.node.shell.InteractiveShell$ShellLifecycle.start(InteractiveShell.kt:181) 
    at net.corda.node.shell.InteractiveShell.startShell(InteractiveShell.kt:118) 
    at net.corda.node.internal.AbstractNode.startShell(AbstractNode.kt:297) 
    at net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:262) 
    at net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:105) 
    at net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:700) 
    at net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:105) 
    at net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:152) 
    at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:138) 
    at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:124) 
    at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:131) 
    at net.corda.node.internal.AbstractNode.initialiseDatabasePersistence(AbstractNode.kt:699) 
    at net.corda.node.internal.Node.initialiseDatabasePersistence(Node.kt:347) 
    at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:207) 
    at net.corda.node.internal.Node.start(Node.kt:361) 
    at net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:805) 
    at net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:767) 
    at net.corda.core.internal.concurrent.ValueOrException$DefaultImpls.capture(CordaFutureImpl.kt:107) 
    at net.corda.core.internal.concurrent.OpenFuture$DefaultImpls.capture(CordaFutureImpl.kt) 
    at net.corda.core.internal.concurrent.CordaFutureImpl.capture(CordaFutureImpl.kt:119) 
    at net.corda.core.internal.concurrent.CordaFutureImplKt$fork$$inlined$also$lambda$1.run(CordaFutureImpl.kt:22) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$Sche..(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source)

У меня запущена только одна нода и, казалось бы, никакие процессы не могут помешать выполнению программы (опять же, она отлично работает при запуске из IDE)

Было бы полезно, если бы вы предоставили код, вызывающий ошибку, вместо трассировки исключения. Также может быть важна операционная система, которую вы используете.

U. Windl 11.03.2019 19:43
val rpcUsers = listOf(User("user1", "test", permissions = setOf("ALL"))) driver(DriverParameters(startNodesInProcess = true, waitForAllNodesToFinish = true)) { startNode(providedName = CordaX500Name("PartyG", "New York", "US"), rpcUsers = rpcUsers).getOrThrow() } Рассматриваемый код. Он должен запустить узел, но где-то внутри, я полагаю, происходит сбой. Операционная система Windows 10
HawkV 12.03.2019 10:22

Вы поняли, что могу редактируете вопрос? Форматы кода намного лучше в вопросах (и ответах), чем в комментариях. И: Если это часть вопроса, добавьте его к вопросу!

U. Windl 13.03.2019 13:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
294
1

Ответы 1

Address already in use вероятно означает, что этот порт использует другая программа. Убедитесь, что одновременно работает только 1 экземпляр вашего кода. Кроме того, попробуйте изменить порт, который он использует, или найдите программу, использующую этот порт.

Сложность заключается в том, что я не могу проверить, какой порт пытается использовать программа, потому что она не работает внутри функции библиотеки Corda. И порты, которые мы настраиваем вручную, можно использовать, потому что они работают, когда мы запускаем их из IDE.

HawkV 12.03.2019 10:22

Тогда это означает, что вам нужно найти порт, который использует Корда, боюсь, здесь вы мало что сможете сделать.

Benoit TH 12.03.2019 14:36

Другие вопросы по теме