Java-программа, использующая класс из файла JAR - PullRequest
1 голос
/ 10 января 2011

Я постараюсь сформулировать это как можно лучше.У меня есть программа, которая имеет API-подобную функциональность - она ​​использует отражение для динамического вызова методов из класса.В этом случае:

Server.java

public static void main(String[] args) {
    Class<?> clazz = Class.forName("DiHandler");
    StHandler out = (StHandler) clazz.newInstance();
    out.read();
}

DiHandler.java

// implements StHandler
import edu.ds.*;

public void read() {
    Ds aType = new Ds();
    aType = "134";
}

Таким образом, у DiHandler есть метод read (), который может содержать все, что угодноПосле компиляции это не имеет значения для Server.java.

Моя проблема: DiHandler.java использует класс Ds из файла JAR.Когда я работаю над DiHandler.java в Eclipse (в отдельном проекте от проекта Server.java), я могу добавить этот JAR без проблем.Но когда я перемещаю DiHandler.class, после того как он скомпилирован, для использования в Server.class, как он по-прежнему может использовать файл JAR?

Надеюсь, в этом есть какой-то смысл, полагаю, другой способ сформулировать этоМожет быть, как я могу позволить DiHandler вызывать класс из JAR без редактирования пути к классу?

Большое спасибо заранее и извиняюсь за путаницу или плохую формулировку, я могу только выразить благодарность и обычное предложениеПинта за любую помощь.

M

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Так или иначе, вы должны сообщить ClassLoader, который загружает DiHandler, как загрузить ваш класс Ds. Самый простой способ - через путь к классам.

Другой способ - предоставить свой собственный ClassLoader, который вы используете для загрузки DiHandler, при этом ClassLoader знает, как загрузить Ds. Это может быть подкласс URLClassLoader, который позволяет добавлять URL-адреса к файлам JAR на лету. Как это будет выглядеть на практике, я не могу сказать, так как не знаю деталей вашего контекста.

0 голосов
/ 10 января 2011

Вы можете использовать класс, только если JVM имеет к нему доступ.Это означает, что класс должен находиться в пути к классам JVM.

Существует несколько способов поместить банку в путь к классу программы.Возможно, если вы опишете среду, в которой вы работаете, и ограничения, с которыми вы сталкиваетесь, кто-то сможет помочь вам найти правильный механизм для размещения зависимой банки на пути к классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...