2012-08-15 14 views
8

Seit ich auf Mountain Lion aktualisiert habe, kann ich meinen AppleScript-Code nicht mehr über den Java ScriptEngineManager ausführen.Java ScriptEngineManager funktioniert nicht mehr mit Mountain Lions AppleScript

Der Beispielcode auf Apples Seite (link) gibt null für das Objekt engine zurück.

public static void main(String[] args) throws Throwable { 
    String script = "say \"Hello from Java\""; 

    ScriptEngineManager mgr = new ScriptEngineManager(); 
    ScriptEngine engine = mgr.getEngineByName("AppleScript"); 
    engine.eval(script); 
} 

Kennt jemand irgendwelche Umgehungslösungen?

+0

Haben Sie Java installiert? Apple liefert keine Version von Java mit MacOSX mehr. Im Terminal versuchen Sie ... Java-Version. Das wird Ihnen sagen, wenn Sie Java installieren müssen. – regulus6633

+0

Ja, Java ist installiert. – dejuknow

Antwort

4

Ich habe es funktioniert, indem Sie eine Datei mit dem Namen "javax.script.ScriptEngineFactory" in den Ordner "META-INF/services" meines Glases als ytw angegeben.

Ich muss auch ein bisschen Code ändern: Sprache scheint nicht mehr "AppleScript", sondern "AppleScriptEngine" zu sein. So sollte diese Arbeit:

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); 
    } 

Zumindest funktioniert auf meinem MacOS X Mavericks mit JDK 1.7.45 ...

+3

Sie haben vergessen zu erwähnen, dass Sie die folgende Zeile innerhalb der Datei "META-INF/services/javax.script.ScriptEngineFactory" hinzufügen müssen: apple.applescript.AppleScriptEngineFactory –

+0

Sie haben Recht Saeid – Alban

3

Ich funktionierte, indem ich AppleScriptEngine.jar und libAppleScriptEngine.jnilib aus/System/Library/Java/Extensions/Mac OS X 10.7 (Lion) kopierte und es meinem Klassenpfad hinzufügte.

Nicht sicher, warum Apple diese Erweiterungen in Mountain Lion entfernt. Ich habe darüber in ihren Entwicklerforen gefragt: link.

+0

Hast du eine Antwort im Forum erhalten? (Der Link scheint jetzt zu sein.) – qerub

+2

Ich habe eine Antwort auf ihr Fehlerverfolgungssystem erhalten. Ich habe ihre Antwort als separate Antwort hinzugefügt. – dejuknow

4

Ich habe dieses Problem auf bugreport.apple.com (Bug-ID: 12692742) veröffentlicht. Ich habe diese Antwort erhalten:

20-Feb-2013 04:21 PM Apple Entwickler Bug Reporting Team: Wir denken, Sie hatten eine Installation von Lion mit JavaDeveloper. Sie haben ein Upgrade auf Mountain Lion durchgeführt, das (von Entwurf) alle Spuren von zuvor installiertem Java SE 6 unter/System entfernt hat. Dies hinterließ ein funktionales SE 6 JDK-Bundle unter/Library/Java/JavaVirtualMachines, aber die Inhalte von/System/Library/Java/Extensions waren weg.

Sie können dies ein paar Wege lösen:

1) Setzen Sie die JavaDeveloper Paket auf dem System Mountain Lion.

2) Installieren Sie Java für OS X erneut, indem Sie alle JDK-Bundles unter/Library/Java/JavaVirtualMachines und/System/Library/Java/JavaVirtualMachines entfernen und "java -version" oder "/ usr/libexec/java_home" ausführen. -request ', um Installation auf Anforderung zu initiieren.

3) Installieren Sie Java 7 von Oracle, das AppleScriptEngine bündelt.

Von den 3 Optionen ist # 3 die Empfehlung, da Entwickler sowieso auf Java 7 umsteigen sollten.

2

Die AppleScriptEngine-Klasse befindet sich bereits in rt.jar (Java 7 für Mac OS X). Wenn Sie die Informationen hier (http://docs.oracle.com/javase/7/docs/api/?javax/script/package-summary.html) befolgen, um sie "sichtbar" zu machen, indem Sie eine Datei namens javax.script.ScriptEngineFactory unter META-INF/services platzieren, kann sie ohne die AppleScriptEngine.jar in/System/Library/Java/Erweiterungen /. Persönlich finde ich es robuster, das zu verwenden, was bereits in rt.jar ist.

2

Unter Mac OS Yosemite, java -version: 1.7.0_40-ea

  1. Anstelle von ScriptEngine Engine = mgr.getEngineByName ("AppleScript"); Sie müssen verwenden:

ScriptEngine-Engine = mgr.getEngineByName ("AppleScriptEngine");

  1. In Ihrem src Verzeichnis Verzeichnis META-INF

  2. In Ihrem src Verzeichnis erstellen Verzeichnis META-INF/service

  3. erstellen Datei META-INF erstellen/Dienstleistungen/javax.script.ScriptEngineFactory

  4. In dieser Datei ist eine Zeile:

apple.applescript.AppleScriptEngineFactory

Anwendung erstellen und ausführen! (BTW ist es nicht mehr Java, es ist Magie)

Verwandte Themen