Установка привязки Java ZeroMQ (jzmq) с помощью Maven, библиотека отсутствующего исходного кода
Я пытаюсь установить jzmq, привязку Java ZeroMQ, из репозитория Maven ( http://search.maven.org/). При добавлении в качестве зависимости к моему pom.xml[1] Maven загружает основной файл jar, который, как и ожидалось, предоставляет библиотеку Java. В дополнение к основной библиотеке для jzmq требуется библиотека с собственным кодом, которую Maven не загружает. Во время выполнения библиотека Java вызывает исключение из-за отсутствия библиотеки собственного кода.
Собственная библиотека предоставляется в хранилище, и файл pom.xml[2] для jzmq, по-видимому, указывает, что должна быть загружена собственная библиотека (libjzmq.so). Если я скачаю библиотеку и вручную установлю расположение собственной библиотеки, все это будет работать, однако я бы предпочел, чтобы это можно было автоматизировать через Maven.
Я не уверен, почему Maven не загружает и не устанавливает нативную библиотеку. Будем весьма благодарны за любые советы или предложения относительно решения этой проблемы.
Я использую последнюю версию Ubuntu с использованием OpenJDK и Apache Maven 3.0.4
[0] Исключение, которое возникает при использовании jzmq, как это предусмотрено в Maven, лишает ключевой библиотеки нативного кода.
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jzmq in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1874)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at org.zeromq.ZMQ.<clinit>(ZMQ.java:39)
[1] Мой pom.xml, где jzmq добавляется как зависимость
<dependency>
<GroupId>org.zeromq</groupId>
<artifactId>jzmq</artifactId>
version>2.2.2</version>
</dependency>
[2] pom.xml для jzmq, где упоминается нативная библиотека
<profile>
<id>Linux</id>
<activation>
<property>
<name>os.name</name>
<value>Linux</value>
</property></activation>
<properties>
<native.os>${os.name}</native.os>
<native.path>src/.libs/libjzmq.so</native.path>
<!-- Use platform-specific path separators here: -->
<native.library-path>src/.libs/</native.library-path>
</properties>
</profile>
1 ответ
Вы должны указать Java, где найти нативную библиотеку.
java -Djava.library.path=/usr/local/lib xxxxx
Чтобы запустить JZMQ, вам нужно 2 вещи,
- /usr/local/share/java/zmq.jar
- родная библиотека, (libjzmq.dylib или libjzmq.dll или libjzmq.so)
обратитесь к http://zeromq.org/bindings:java для подробностей
Чтобы избежать проблем с настройкой, я полагаю, вы можете проверить, как встраивать нативную библиотеку. Когда класс "org.zeromq.ZMQ" инициализируется сам, он сначала попытается загрузить встроенную библиотеку,
static {
// if no embedded native library, revert to loading from java.library.path
if (!EmbeddedLibraryTools.LOADED_EMBEDDED_LIBRARY)
System.loadLibrary("jzmq");
}
В качестве альтернативы, если вы предпочитаете не использовать собственную библиотеку и просто хотите быстро приступить к работе, вы можете выбрать использование java-эквивалента библиотеки zeromq, добавив ниже в свой pom.xml
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jeromq</artifactId>
<version>0.5.2</version>
</dependency>
Чтобы узнать больше о различиях, вы можете обратиться к ответу на вопрос здесь:
Актуальный список версий jeromq см. В mvnrepository здесь