Java - внешние файлы, .java , .class и расширение функционала
Итак, делаю не большой проект на Java, неважно какой, и появилась идея -- можно ли как-то импортировать / загрузить внешний Java-файл в проект, и использовать его для расширения функционала текущей программы?
Если конкретнее, проблема заключается в том, что есть проект, допустим он в папке:
...\projects\programa\ishodnik\
И есть некоторый сторонний (Не совсем сторонний, связанный по функционалу конечно) Java-файл который будет находиться в папке:
...\projects\programa\extensions\
Задача: Взять все файлы из этой папки, импортировать их в главный проект, и когда прейдет его время, выполнить/использовать код/класс который находиться в этом файле. Я видел кое-что про classLoader и .class файлы, но не уверен что это то, что мне нужно, не понял до конца, возможно -- плохо гуглил, не знаю. Ещё желательно чтобы это не требовало сильной подготовки, если это возможно, а работало без лишних действий со стороны пользователя, например -- появился файл (Пользователь его создал), программу запускаешь (Или она уже запущена) и она уже все делает, считывает и тд.
----------Проблема решена-----------
Я бы задал ещё 1 вопрос, как запустить тот самый метод из уже скомпилированного скрипта с аргументами? И будет ли таким образом работать return (Из .class файла)
Оказалось все решается, как я понял, элементарно:
runMethod.invoke(null, argument1, argument2...);
А return можно принимать как-то так (не знаю, может фигню сделал, но это первое что пришло в голову):
int testReturn = (int)runMethod.invoke(null, argument1, argument2);
Всем ещё раз спасибо всем за помощь!
Источник информации: Компилирование и исполнение Java-кода в Runtime
Ответы (2 шт):
Я вижу три способа решить эту проблему:
Просто переместить
extensionsв ваш проект - проще всего.Сделать корнем проекта папку
\projects\programa. Тогда папка\projects\programa\extensionsокажется в вашем проекте - тоже хороший способ.Более сложный способ, но это как раз то, что вы хотели сделать. Упаковать в
jarтот самый класс и подключить его как библиотеку к вашему проекту. Об есть множество информации в интернете, как это осуществить в каждой среде разработки.
ИТАК Вот файл который я пытаюсь загрузить:
public class botCommand {
public static void run() {
System.out.println("HELLO! WORKS!");
}
}
Когда я добавил в файл .java (Который я пытаюсь загрузить) ещё и
public class botCommand {
public botCommand() {
}
public static void run() {
System.out.println("HELLO! WORKS!");
}
}
А в строчке кода:
Class<?> loadedClass = urlClassLoader.loadClass("testClass.testClass");
Упростил все до:
Class<?> loadedClass = urlClassLoader.loadClass("testClass");
Это заработало! Спасибо все кто помогал!