• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

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

dimat

Lotus team
31.07.2008
516
0
#1
Хочу сказать что на яве я никогда ничего не писал и в связи с этим есть вопрос:
Вот скачал я один из примеров и что дальше с ним делать?
там куча папок файлов
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#2
dimat
пример может быть оформлен по-разному
в виде набора классов запакованных в jar (готовая библиотека)
в виде кода - каждый класс в своем файле
вариант первый - кладём либу в jvm/lib/ext
вариант второй - импортим код в агент
 

Omh

Lotus team
04.07.2007
2 210
1
#3
Подсел я тут немного на твиттер, хочу синтегрировать с одной лотусной базой.
Будет твиттить униды документов ;)
Шутка.

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

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

Пока есть запал, помогите плз, что я делаю не так.
Спасибо заранее, камрады!
 

Omh

Lotus team
04.07.2007
2 210
1
#5
Во!
Скомпилилось!
Только
Код:
import winterwell.jtwitter.*
я написал.

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

Я в джаве - ноль.
Надо учить.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#6
угу
это путь разделённый точками (как каталоги слэшами)
звезда заменяет название конкретных классов в пути
открой jar (это zip) и сам увидишь
 

Omh

Lotus team
04.07.2007
2 210
1
#7
Значит
Код:
import winterwell.jtwitter.*;
сделал

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

В jar уже поковырялся.
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
Во!
Скомпилилось!
Только "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]
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#10
ты для какой версии jvm взял jar (в манифесте смори)
и под какой jvm пущаешь...
она те грит версия класса новее - чем поддерж.

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

Добавлено:
засада с этой библой
там женерики и аннотации, т.е. минимально - 1.5 джава
либо код править
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#11
Всем привет!
Уже замучился копать.. никак не получается подключить java-класс. Получаю ошибку:
05/09/2012 18:55:39 Agent error: java.lang.NoClassDefFoundError
Куда только jar-файл не кидал. :)
Может есть возможность загрузить класс динамически? На лету.

Вот нашел это... правда не разобрался как работать дальше :(
Класс вроде как подгружается но получаю все ту же ошибку :(
 

oshmianski

Достойный программист
Lotus team
25.04.2012
555
8
#12
сторонние jar'ки нужно класть в %notes%\jvm\lib\ext\.
после этого нужна перезагрузка клиента.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#13
ложили :)
но сдается мне не перегружали :(
А с динамической загрузкой ничего решить нельзя?
Забыл уточнить - речь идет о Solaris
 

Kmet

Java Team
25.05.2006
1 036
8
#15
надо смотреть весь стектрейс
java.lang.NoClassDefFoundError не обязательно значит что класс не найден, часто этот эксептион означает, что класс был найден, но ициализовать его не получилось
 

savl

Lotus team
28.10.2011
2 135
104
#16
Добрый, правда уже сомнительно...
Замаялся я уже... Не могу подключить в Лотус 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
 

Кирилл Шваб

Well-known member
30.06.2006
145
4
#17
savl,

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

А JavaUserClasses и JavaUserClassesExt в notes.ini заполняют, когда библиотеки хранятся в какой-то другой директории.
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#18
Если в агенте сделать в JavaAgent.java "Project->Proteries->Libraries, Add External JAR", то ошибка исчезает. НО ровно до закрытия JavaAgent.java, как только закрыл уже есть ошибка.
У меня точно также, но до закрытия, когда код нормальный, оно ж компилит, и потом работает, хотя и ошибка светится.

Задача написать агента, из-за библиотек, которые открывают свои потоки не могу вставить их в тело агента, агент по завершению не закрывает нормально их.
to All
Это всегда так или может можно как-то правильно закрыть?
 

savl

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

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