Java ScriptEngineManager больше не работает с AppleScript горного льва
С тех пор, как я обновился до Mountain Lion, я не могу запустить свой код AppleScript через Java ScriptEngineManager.
пример кода, найденный на странице Apple (ссылке) возвращает null для
5 ответов
Я получил его работу, добавив файл с именем "javax.скрипт.ScriptEngineFactory "в папке" META-INF/services " моего jar, как указано ytw.
мне также нужно изменить немного кода: язык, кажется, больше не" AppleScript", а"AppleScriptEngine". Так что это должно сработать:
public static void main(String[] args) throws Throwable {
String script = "say \"Hello from Java\"";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("AppleScriptEngine");
engine.eval(script);
}
по крайней мере, это работает на моих MacOS X Mavericks с JDK 1.7.45...
Я опубликовал этот вопрос на bugreport.apple.com (идентификатор ошибки: 12692742). Я получил такой ответ:
20-Feb-2013 04:21 PM команда разработчиков отчетов об ошибках Apple : Мы думаем, что у вас была установка Lion с JavaDeveloper. Вы обновились до Mountain Lion, который удалил (по дизайну) все следы ранее установленной Java SE 6 под /System. Это оставило функциональный пакет SE 6 JDK под /Library / Java /JavaVirtualMachines, но содержимое/System/Library/Java / Extensions было ушедший.
вы можете решить это несколькими способами:
1) переустановите пакет JavaDeveloper в системе Mountain Lion.
2) переустановите Java для OS X, удалив все пакеты JDK в /Library/Java /JavaVirtualMachines и/System/Library/Java/JavaVirtualMachines и запустив "java-version" или "/usr/libexec / java_home --request " для запуска install-on-demand.
3) Установите Java 7 из Oracle, который связывает AppleScriptEngine.
из 3 вариантов #3 является рекомендуемым, так как разработчики все равно должны переходить на Java 7.
Я получил эту работу, скопировав AppleScriptEngine.jar и libAppleScriptEngine.jnilib из /System/Library/Java/ Extensions / на Mac OS X 10.7 (Lion) и добавление его в мой путь к классам.
Не уверен, почему Apple удалила эти расширения в Mountain Lion. Я спросил об этом на своих форумах разработчиков здесь:ссылке.
класс AppleScriptEngine уже находится в rt.jar (Java 7 для Mac OS X). Если вы следите за информацией здесь (http://docs.oracle.com/javase/7/docs/api/?javax/script/package-summary.html), чтобы сделать его "обнаруживаемым", поместив файл с именем javax.скрипт.ScriptEngineFactory под META-INF / services, то он может работать, не полагаясь на AppleScriptEngine.jar in / система / библиотека / Java / расширения/. Лично я думаю, что более надежно использовать то, что уже есть rt.jar - ...
на Mac OS Yosemite, java-версия: 1.7.0_40-ea
- вместо ScriptEngine engine = mgr.getEngineByName ("AppleScript"); необходимо использовать:
ScriptEngine engine = mgr.getEngineByName ("AppleScriptEngine");
в каталоге src создайте каталог META-INF
в каталоге src создайте каталог META-INF/services
создать файл META-INF/услуги/javax.скрипт.ScriptEngineFactory
в этом файле одну строку:
яблоко.помощью AppleScript.AppleScriptEngineFactory
построить и запустить приложение ! (Кстати это не больше Java, это магия)