Aktuelles Arbeitsverzeichnis beim Ausführen eines Jar

8

Ich habe eine Anwendung erstellt, bei der es sich um eine ausführbare JAR-Datei handelt (mit Hilfe des maven-assembly-Plugins), die einige benutzerkonfigurierbare Ressourcen enthält, die sich im selben Verzeichnis befinden (Bilder, Eigenschaften usw.).

Wenn Sie das Jar über die Befehlszeile mit java -jar ... ausführen, entspricht das aktuelle Verzeichnis Ihren Erwartungen. Das Problem ist, dass auf einigen Betriebssystemen (Ubuntu 11.04), wenn die Anwendung durch einfaches Doppelklicken auf das JAR gestartet wird, das aktuelle Arbeitsverzeichnis das Home-Verzeichnis ist.

Gibt es eine bevorzugte Möglichkeit, das aktuelle Verzeichnis, in dem sich das jar befindet, oder eine andere Methode für den Zugriff auf externe Ressourcen zu erhalten, die neben dem jar sitzen?

    
job 22.06.2011, 00:13
quelle

2 Antworten

11

Sie können MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath() verwenden, um den Speicherort der JAR-Datei abzurufen.

Eine andere Alternative wäre, die anderen schreibgeschützten Ressourcen in Ihrer JAR-Datei zusammen mit verwandten Klassen zu packen, damit Sie Klasse.getResource (String) oder Class.getResourceAsStream(String) , um Ressourcen relativ zur angegebenen Klasse zu erhalten.

Sie könnten beispielsweise eine Klasse com.example.icons.Icons haben, und die Symbole würden neben Icons.class in der com / Beispiel / myapp / icons / Pfad. Angenommen, Ihre Schaltfläche "Öffnen" verwendet ein Symbol mit dem Namen open.png :

%Vor%     
rob 22.06.2011, 00:29
quelle
1

Hier mein Versuch, das Verzeichnis zu entdecken, von dem ein jar ausgeführt wird.

%Vor%

Zuerst erstelle ich den "Pfad" der aktuellen Klasse, indem ich das "." mit "/", dann erhalte ich die .class als Ressource. Die toString () -Methode gibt etwas wie folgt zurück:

%Vor%

Von dort aus parsen Sie die angegebene Zeichenfolge, um das Verzeichnis abzurufen, in dem sich das Jar befindet.

    
RealHowTo 22.06.2011 02:47
quelle

Tags und Links