tl; dr
Welche Abhängigkeit fehlt mir, die es NetBeans erlaubt, OS X-integriertes Programm intern gut auszuführen, aber nicht in der Lage zu sein, es zu einem JAR zu säubern und zu erstellen?
Ich versuche ein Java-Programm zu erstellen, das in OS X integriert ist, aber ich hoffe, es auch auf Windows und Linux zu veröffentlichen. Um dies zu tun, verwende ich die Utility-Klassen des com.apple.eawt
-Pakets.
Bisher war es großartig. Ich habe meine Menüleiste in OS X integriert, ich habe Preferences Handler und About Handler und all diese tollen Sachen und es funktioniert super ... wenn ich nur auf Run in NetBeans klicke. Jedoch! Wenn ich auf Clean and Build klicke, bekomme ich viele, viele Fehler wie diese:
%Vor%Warum kann ich es einfach in der IDE ausführen, aber ich kann die IDE nicht dazu bringen, es zu einem JAR zu kompilieren?
Ich habe versucht, dass Ajith John das Projekt komplett neu erstellt, indem er ein brandneues NetBeans-Projekt erstellt, alle Quelldateien darin kopiert und auf "Clean and Build" geklickt hat. Ich habe das gleiche Ergebnis, also hat das nicht funktioniert.
Auch wenn sich das Paket com.apple.eawt
im Laufzeit-Jar rt.jar
befindet (falls unter OS X), sucht der Compiler in einer Symboldatei namens ct.sym
nach dem Paket. Die Symboldatei enthält nur die Standard-Java-Pakete und nicht die Apple-Erweiterungen.
Eine Lösung besteht darin, die javac-Option -XDignore.symbol.file
wie unten gezeigt zu verwenden. Die -XD-Optionen sind jedoch nicht standardisiert und nicht dokumentiert, siehe hier und hier .
Eine bessere Lösung könnte darin bestehen, den Code so zu schreiben, dass er die nicht standardmäßigen Apple-Erweiterungen nicht verwendet.
NetBeans haben eine hart organisierte Run-Funktion. Wenn ich es richtig gemacht habe - kompilieren Sie diese Funktion und führen Sie Ihre Anwendung in NetBeans-Prozess (und seinem Klassenpfad) aus. Um das Problem beim Kompilieren mit dem Befehl "build" zu lösen, sollten Sie sicherstellen, dass Ihr Build-Agent alle notwendigen Abhängigkeiten hat:
PS-Paket com.apple.eawt ist ein Apple-Paket. Wenn Sie die Anwendung auf anderen Plattformen starten möchten, sollten Sie einfach AWT (nicht Apple EAWT) oder ein anderes gängiges UI-Framework (zB Swing) verwenden.
Meine aktuelle Problemumgehung besteht darin, das Programm zu bereinigen ( not build) und dann die .class
-Dateien in einen .zip
-Ordner mit a einzufügen korrekt formatiert META_INF
Ordner und manifest.MF
Datei. Dann benenne ich die Erweiterung .zip
in .jar
um und benutze diese gehackte Jarfile!
Tags und Links java macos netbeans cross-platform