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

  1. вместо ScriptEngine engine = mgr.getEngineByName ("AppleScript"); необходимо использовать:

ScriptEngine engine = mgr.getEngineByName ("AppleScriptEngine");

  1. в каталоге src создайте каталог META-INF

  2. в каталоге src создайте каталог META-INF/services

  3. создать файл META-INF/услуги/javax.скрипт.ScriptEngineFactory

  4. в этом файле одну строку:

яблоко.помощью AppleScript.AppleScriptEngineFactory

построить и запустить приложение ! (Кстати это не больше Java, это магия)