• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

dimat

Well-known member
31.07.2008
508
0
BIT
0
Хочу сказать что на яве я никогда ничего не писал и в связи с этим есть вопрос:
Вот скачал я один из примеров и что дальше с ним делать?
там куча папок файлов
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
dimat
пример может быть оформлен по-разному
в виде набора классов запакованных в jar (готовая библиотека)
в виде кода - каждый класс в своем файле
вариант первый - кладём либу в jvm/lib/ext
вариант второй - импортим код в агент
 
O

Omh

Подсел я тут немного на твиттер, хочу синтегрировать с одной лотусной базой.
Будет твиттить униды документов ;)
Шутка.

Скачал я такую библиотеку:


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

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

nvyush

В начале агента есть строка "import winterwell.jtwitter;"?
 
O

Omh

Во!
Скомпилилось!
Только
Код:
import winterwell.jtwitter.*
я написал.

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
угу
это путь разделённый точками (как каталоги слэшами)
звезда заменяет название конкретных классов в пути
открой jar (это zip) и сам увидишь
 
O

Omh

Значит
Код:
import winterwell.jtwitter.*;
сделал

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

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

nvyush

Во!
Скомпилилось!
Только "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]
 
O

Omh

Error.jpg
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
ты для какой версии jvm взял jar (в манифесте смори)
и под какой jvm пущаешь...
она те грит версия класса новее - чем поддерж.

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

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

NickProstoNick

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

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

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
сторонние jar'ки нужно класть в %notes%\jvm\lib\ext\.
после этого нужна перезагрузка клиента.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
ложили :)
но сдается мне не перегружали :(
А с динамической загрузкой ничего решить нельзя?
Забыл уточнить - речь идет о Solaris
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
вероятно можно - если свой класслоадер писать по типу

Добавлено: но сдаётся мне что в большинстве случаев, правильнее - смириться :)
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
надо смотреть весь стектрейс
java.lang.NoClassDefFoundError не обязательно значит что класс не найден, часто этот эксептион означает, что класс был найден, но ициализовать его не получилось
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
Добрый, правда уже сомнительно...
Замаялся я уже... Не могу подключить в Лотус 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
 
30.06.2006
141
5
BIT
0
savl,

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

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

VladSh

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

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

savl

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!