Ответ 1
Я могу использовать классы jar внутри JavaScript таким образом, но вам нужно установить jar в путь к классу, когда вы его запускаете. Я был после решения, подобного Jython/Python, где вы можете установить jar внутри Java, но я просто собираюсь создавать пакетные файлы и sh файлы и устанавливать его таким образом (теперь это проще сделать). Вот мое решение, которое работает для меня.
Для компиляции Затем выполните:
cd C:\your\directory\folder\with\the\javascript\and\java\files
javac -d . ClassSpy.java FileSearch.java HelloWorld.java Main.java Parameters.java Run.java
java -cp ./;C:\ABCAPI\bin\abcapi.jar hammer.main.Main gui=true input=JavaScriptStatus.js
Комментарии к приведенным выше строкам:
-
при компиляции вы можете использовать
-d .
, если у вас есть ваши java файлы в качестве пакетов, которые вы определили, и он поместит их в папки с вашим именем пакета. Если это не ясно, просто проверьте этот пост (я ухожу от задачи) Как скомпилировать пакеты в java?. -
Еще одно замечание: когда я его запускал, я добавил две вещи в мой путь к классу.
-cp
означает путь к классу, и все, что после этого будет добавлено к вашему пути класса для этого текущего прогона. Вы можете разделить их точкой с запятой../
добавляет текущий каталог к пути к классу, а остальное я добавил после того, как это было местонахождение файла jar API, в котором я нуждался. -
hammer.main - это расположение пакета класса Main, который является классом, содержащим мою основную функцию для запуска программы.
-
Два аргумента после этого относятся к моей программе, и вы можете увидеть файл JavaScript, в котором я расскажу Java ScriptEngine, чтобы читать и выполнять.
Использовать файл Jar внутри JavaScript:
Теперь, когда файл jar находится на пути к классу и видимый, мы можем получить пакет из этого файла jar, а затем вызвать классы из пакета. Итак, пример ниже abc.foo.pack.name
- это пакет внутри abcapi.jar
, и два класса, которые я использую ClassFromTheJarFile
и AnotherClassFromTheJarFile
, находятся в этом пакете. Я использую метод установки пакета в переменную, а затем префикс классов, которые я хочу использовать с переменной, содержащей пакет. Другой способ сказать importPackage(com.foo.bar)
, тогда вам не обязательно будет префикс классов каждый раз, когда вы их создаете, но эта техника не работает для меня по какой-то причине (возможно, я сделал что-то неправильно). Во всяком случае, следующий код работает отлично для меня,
myvariable = Packages.abc.foo.pack.name;
var foo = new myvariable.ClassFromTheJarFile("arg1","arg2");
foo.doSomething();
var fooSister = new myvariable.AnotherCLassFromTheJarFile("arg1");
fooSister.doSomthingFromThisClass();
Вывод:
Оказывается, моя ошибка заключалась в том, чтобы импортировать класс прямо так,
myvariable = Packages.abc.foo.pack.name.ClassFromTheJarFile;
Затем я попытался использовать его, например,
var foo = new myvariable.ClassFromTheJarFile("arg1","arg2");
Что не работает.
Надеюсь, это помогает кому-то, потому что я получаю много замечаний вроде "Вы знаете, что Java и JavaScript - это две разные вещи". Ну да, я знаю это, какова ваша мысль?
Keep In Mind:
Я не использую это в браузере или через Интернет. Я использую это через Java ScriptEngine. Если вам нужно получить файл jar из URL-адреса, эта найденная мной ссылка может помочь вам http://mozilla-firefox-extension-dev.blogspot.com/2004/11/calling-java-code-in-custom-jars-from.html