ОБСУЖДЕНИЕ

Подключение внешних Java-библиотек

18 ответов 17 тыс.
AI-выжимка обсуждения скоро
Хочу сказать что на яве я никогда ничего не писал и в связи с этим есть вопрос:
Вот скачал я один из примеров и что дальше с ним делать?
там куча папок файлов
 
dimat
пример может быть оформлен по-разному
в виде набора классов запакованных в jar (готовая библиотека)
в виде кода - каждый класс в своем файле
вариант первый - кладём либу в jvm/lib/ext
вариант второй - импортим код в агент
 
Подсел я тут немного на твиттер, хочу синтегрировать с одной лотусной базой.
Будет твиттить униды документов ;)
Шутка.

Скачал я такую библиотеку:
http://www.winterwell.com/software/jtwitter.php

С экземплами, вроде всё красиво.
Помятуя слова lmike кинул jar в <NOTES>\jvm\lib\ext\
И всё, дальше затык.
Даже к агенту подключить не могу.

Пока есть запал, помогите плз, что я делаю не так.
Спасибо заранее, камрады!
 
В начале агента есть строка "import winterwell.jtwitter;"?
 
Во!
Скомпилилось!
Только
Код:
import winterwell.jtwitter.*
я написал.

Как я понял, "winterwell.jtwitter" это путь к классам внутри jar'a?

Я в джаве - ноль.
Надо учить.
 
угу
это путь разделённый точками (как каталоги слэшами)
звезда заменяет название конкретных классов в пути
открой jar (это zip) и сам увидишь
 
Значит
Код:
import winterwell.jtwitter.*;
сделал

Теперь пытаюсь объявить новый обьект
Код:
Twitter twitter = new Twitter("my-name","my-password");
.
Получаю ошибку
Код:
cannot access winterwell.jtwitter.Twitter
Пошто?

В jar уже поковырялся.
 
Во!
Скомпилилось!
Только "import winterwell.jtwitter.*"я написал.

Как я понял, "winterwell.jtwitter" это путь к классам внутри jar'a?
По ссылке есть исходник библиотеки, в нём первая строка "package winterwell.jtwitter;" — указывает, в каком пакете лежат классы.
Разумеется, нужно добавлять звёздочку, это я в попыхах упустил. Ну или можно явно указывать импортируемые классы, т.е. можно вместо
<!--shcode--><pre><code class='Java'>import java.util.*;[/CODE]указать
<!--shcode--><pre><code class='Java'>import java.util.ArrayList;
import java.util.Arrays;[/CODE]
или явно указывать пакет при объявлении переменных:
<!--shcode--><pre><code class='Java'>java.util.ArrayList myArray;[/CODE]
 
Error.jpg
 
ты для какой версии jvm взял jar (в манифесте смори)
и под какой jvm пущаешь...
она те грит версия класса новее - чем поддерж.

исходники у них под LGPL могешь сам пересобрать...
у них лежит готовый класс (для остальных есть исходники) BuildJTwitter.class
тока вот не знаю его версию
в любом раскладе - можно исходники втянуть в проект нетбинса или эклипса и пересобрать с нужной версией жвм

Добавлено:
засада с этой библой
там женерики и аннотации, т.е. минимально - 1.5 джава
либо код править
 
Всем привет!
Уже замучился копать.. никак не получается подключить java-класс. Получаю ошибку:
05/09/2012 18:55:39 Agent error: java.lang.NoClassDefFoundError
Куда только jar-файл не кидал. :)
Может есть возможность загрузить класс динамически? На лету.

Вот нашел это... правда не разобрался как работать дальше :(
Класс вроде как подгружается но получаю все ту же ошибку :(
 
сторонние jar'ки нужно класть в %notes%\jvm\lib\ext\.
после этого нужна перезагрузка клиента.
 
ложили :)
но сдается мне не перегружали :(
А с динамической загрузкой ничего решить нельзя?
Забыл уточнить - речь идет о Solaris
 
надо смотреть весь стектрейс
java.lang.NoClassDefFoundError не обязательно значит что класс не найден, часто этот эксептион означает, что класс был найден, но ициализовать его не получилось
 
Добрый, правда уже сомнительно...
Замаялся я уже... Не могу подключить в Лотус jar-файлы.
В {home}\jvm\lib\ext\ файлы кинул, писал в notes.ini JavaUserClasses, перезагружал комп (база на локале)
Но не видит и все...
Задача написать агента, из-за библиотек, которые открывают свои потоки не могу вставить их в тело агента, агент по завершению не закрывает нормально их. Надо вот вынести...

Если в агенте сделать в JavaAgent.java "Project->Proteries->Libraries, Add External JAR", то ошибка исчезает. НО ровно до закрытия JavaAgent.java, как только закрыл уже есть ошибка. Прошу помощи, никогда такого не делал...

UPD: сделал, почему получилось не сразу не знаю...

в Notes.ini клиента:
JavaUserClasses=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\
JavaUserClassesExt=commonsnet,commonsvfs,zehon,jsch
commonsnet=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\commons-net-2.0.jar
commonsvfs=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\commons-vfs-2.0.jar
zehon=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\zehon_file_transfer-1.1.6.jar
jsch=C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext\jsch-0.1.41.jar
 
savl,

по идее если jar библиотеки кладутся в jvm\lib\ext, то достаточно только выложить файлы туда и перезапустить клиент/сервер, чтобы JVM подхватила нужные библиотеки.

А JavaUserClasses и JavaUserClassesExt в notes.ini заполняют, когда библиотеки хранятся в какой-то другой директории.
 
Если в агенте сделать в JavaAgent.java "Project->Proteries->Libraries, Add External JAR", то ошибка исчезает. НО ровно до закрытия JavaAgent.java, как только закрыл уже есть ошибка.
У меня точно также, но до закрытия, когда код нормальный, оно ж компилит, и потом работает, хотя и ошибка светится.

Задача написать агента, из-за библиотек, которые открывают свои потоки не могу вставить их в тело агента, агент по завершению не закрывает нормально их.
to All
Это всегда так или может можно как-то правильно закрыть?
 
VladSh
Как почитал - всегда. Когда сторонний jar открывает свои нити лотусовый java поток не может их нормально закрыть и выгрузить из памяти эти jar. Идет ошибка "Error cleaning up agent threads". Единственный вариант - положить их в папку и прописать, чтобы клиент/сервер их видел.
А вот компиляция до закрытия меня просто не устраивает, сегодня помню что все хорошо, а через месяц могу и забыть... Буду ошибку искать.
Не каждый jar открывает потоки, тот же iText я встраивал в тело агента, но сейчас работал с SFTP. Вот при создании канала идет свой поток.
UPD: Можно обойти, если самому выгружать jar из памяти... Я пока не знаю как.

Кирилл Шваб
Вот как бы да, но в то же время нет. У меня клиент 8.5.3 может это его фича, но пока не прописал в ini ничего не находил, да и после того как прописал перезапустил лотус пару раз.
 

Статистика тем

Создано
dimat,
Последний ответ от
savl,
Ответы
18
Просмотры
16 990