Для правильного использования сторонних библиотек в Java необходимо добавить их в classpath вашего приложения. Это можно сделать различными способами в зависимости от используемой среды разработки и сборки проекта.
**1. Ручное добавление JAR-файлов в classpath**
Если вы не используете систему сборки, такую как Maven или Gradle, вы можете добавить JAR-файлы в classpath вручную. Пример команды для запуска приложения с JAR-файлами в папке libs:
```sh
java -cp "libs/*;your_program.jar" your.main.Class
```
В этом случае classpath будет содержать все JAR-файлы из папки `libs` и ваш исполняемый JAR-файл `your_program.jar`. Класс `your.main.Class` является точкой входа в ваше приложение (с методом `public static void main(String[] args)`).
**2. Использование системы сборки**
Если вы используете систему сборки, например Maven, вы добавляете зависимости в файл `pom.xml` вашего проекта:
```xml
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegram-bot-api</artifactId>
<version>ВЕРСИЯ</version>
</dependency>
</dependencies>
```
Для Gradle, вы добавляете зависимости в файл `build.gradle`:
```groovy
dependencies {
implementation 'org.telegram:telegram-bot-api:ВЕРСИЯ'
}
```
Система сборки автоматически скачает и добавит библиотеки в classpath.
**3. Динамическая загрузка библиотек**
Если вы хотите докачивать библиотеки во время исполнения и динамически добавлять их в classpath, то вам придётся использовать кастомный class loader. Это немного сложнее и требует понимания работы class loaders в Java.
Пример кода для загрузки JAR-файла в runtime:
```java
URLClassLoader childClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
URL jarUrl = new File("path/to/your/library.jar").toURI().toURL();
method.invoke(childClassLoader, jarUrl);
```
Этот код позволяет добавить JAR-файл в classpath во время выполнения программы.
**Примечание:** Изменение classpath во время выполнения программы может привести к непредвиденным проблемам и ошибкам, особенно если классы из библиотеки уже были загружены или библиотека конфликтует с существующими зависимостями.
Перед тем, как выбрать один из этих подходов, внимательно продумайте архитектуру вашего приложения, и учитывайте потенциальные риски изменения classpath во время выполнения.