Warum führt NetBeans mein Programm unter OS X aus, aber nicht in JAR?

8

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?

versuchte Korrektur

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.

    
Ben Leggiero 15.06.2015, 12:58
quelle

3 Antworten

1

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.

    
ores 05.07.2016, 22:16
quelle
0

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:

  • Für Maven - fügen Sie einfach eine Abhängigkeit in pom.xml,
  • hinzu
  • Für ant - sollten Sie classpath angeben, um erforderliche .jar hinzuzufügen.

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.

    
Pavel Uvarov 15.06.2015 13:19
quelle
0

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!

    
Ben Leggiero 25.01.2016 20:11
quelle