Загрузка класса в Java - PullRequest
0 голосов
/ 15 марта 2012

Я хотел бы загрузить класс, который находится в другом проекте;следуя структуре моих пакетов, проектов и т. д.:

--ProjectA
  --package myPackageA
    --myClassA

 --ProjectB
  --package myPackageB
    --myClassB
      --myMethodB

В myMethodB я хочу загрузить класс "myClassA" из ProjectA.Я знаю, как загрузить класс, если он был внутри ProjectB, но я не знаю, как ссылаться на него с моей текущей структурой.

Вкратце: что я пишу вместо "location_of_myClassA"?

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Если загрузчик классов знает о них обоих, вам просто необходимо дать полное имя класса:

...loadClass("myPackageA.myClassA")

ClassLoader.loadClass не нужно указывать "местоположение" - это часть того, как инициализируется (например, чтобы указать на конкретный файл jar или набор файлов jar).

0 голосов
/ 15 марта 2012

Пока все файлы .class находятся в вашем classpath (или в файлах .jar в вашем classpath), вам не нужно ничего делать, кроме:

Class<?> c = Class.forName(classname);

Конечно, для этого используется системный загрузчик классов по умолчанию (который управляется параметром jvm "java.class.path", т. Е. Аргумент "-cp" в исполняемом файле java).

Кроме того, вы можете использовать Context ClassLoader, как указано выше, или использовать тот же загрузчик классов, который загрузил какой-то другой определенный класс:

// within an instance method
Class<?> c = getClass().getClassLoader().loadClass(classname)

// within some other object (other than SomeClass), or a static method:
Class<?> c = SomeClass.class.getClassLoader().loadClass(classname);

В типичном приложении командной строки все 3 из них по существу будут одинаковыми, поскольку существует только системный загрузчик классов (если приложение явно не заменяет загрузчик классов). Однако в веб-приложении контейнер сервлета обычно предоставляет настраиваемые загрузчики классов для хранения отдельных путей к классам для каждого веб-приложения, поэтому существует разница в том, какой из них вы хотите вызывать (я не буду вдаваться в подробности здесь).

Если вызов одного из них не работает для вас, это означает, что класс, который вы пытаетесь загрузить, отсутствует в одной из записей вашего classpath, и, возможно, проблема в настройке IDE (возможно, вы не добавили проект проецировать путь к классу b) или настройку maven (вы не определили зависимость от проекта a в проекте b).

0 голосов
/ 15 марта 2012

Для Eclipse,

Right Click Project -> Build Path -> Configure Build Path -> Project References

Выберите проекты, на которые вы хотите сослаться

Для Netbeans,

Right Click Project -> Properties -> Libraries -> Add Project(Compile Tab)

Выберите проекты.

0 голосов
/ 15 марта 2012

Вы всегда можете попробовать использовать JARMaker для создания ProjectA и использовать его в качестве библиотеки в ProjectB

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