Die Krux mit “definierten” Verzeichnisstrukuren

Eigentlich wollte ich einen neuen Bugreport schreiben, in dem ich vorgeschlagen hätte meine Version mit dem Userdir in “Eigenen Dateien” speichern vorgeschlagen hätte. Und da man ja ein guter Reporter sein möchte sucht man vorher nach schon getätigten Reports um Duplikate zu vermeiden. Dabei ist mir dann ein anderer Eintrag aufgefallen, der zwar schon was älter ist aber das Problem mit dem überfüllten Windowsprofil eleganter lösen könnte.

Die Idee dahinter ist, dass man die Einstellungen des Anwenders wie bisher im Verzeichnis %APPDATA% also im Benutzerprofil lässt, aber die alle “temporären” Daten wie das Protokoll oder den Cache unter Windows aus dem bisherigen Userdir auslagert. Microsoft Windows kennt dafür den “Shell Folder” “Local AppData”. Dieses Verzeichnis liegt normalerweise nicht bei den “Roaming” Daten ((also den Dateien, die auf den Server zurückkopiert werden)), und enthält per Definition nur Daten, die vom Benutzer rechnerspezifisch gespeichert werden. Vor allem werden sie bei der Berechnung der Profilgröße nicht mit einbezogen. Also eigentlich genau das, was mich an dem aktuellen System stört.

Bei dem Bugreport läuft die “aktuelle” Diskussion mehr darum, wo denn dieser zweite Speicherort auf dem Rechner sein könnte statt sich darum zu kümmern, ob das ganze überhaupt möglich ist umzusetzen. Denn genau hier liegt eine Schwierigkeit.

Aktuell gibt es eine Systemproperty netbeans.user in der der Pfad zum aktuellen Userdir abgelegt ist. Darüber hinaus existiert keine Konstante oder Methode um die weitere Struktur im Userdir zu bestimmen. Lediglich ein paar Konventionen sind vorhanden. Aus dem Grund gibt es im Quelltext von NetBeans unzählige Stellen die ähnlich wie dieser aussehen:

1
2
3
4
private File getStorageRootFile() {
  String userDir = System.getProperty("netbeans.user");
  return new File(new File(userDir, "var"), "bugtracking");
}

Das Verzeichnis var ist genau das worum es sich bei den “rechnerspezifischen” also “lokalen” Daten handelt. Und dies gilt es an einen anderen Ort “außerhalb” von netbeans.user zu verschieben. Wird nicht leicht werden.

Ich habe mal den Vorschlag gemacht eine neue Systemproperty netbeans.user.var einzuführen. Damit könnte man genauso leicht auf das Verzeichnis zugreifen, wie bisher per netbeans.user und man müsste nur alle “new File(userDir, "var")” Stellen ersetzten. Mal sehen, ob jemand darauf eingeht.

2 Gedanken zu “Die Krux mit “definierten” Verzeichnisstrukuren

  • 28. Februar 2011 um 10:10
    Permalink

    Moin!

    Die Nutzung von APPDATA für Windows-Systeme scheint mir möglich, da einige Voraussetzungen inzwischen gegeben sind.

    Schon NetBeans 6.9.1 benötigt mindestens Java 6 als Laufzeitumgebung und Windows XP (für Win-Systeme) als OS. Meines Wissens nach gibt es APPDATA erst ab XP und Umgebungsvariablen kann man seit Java 5 auch wieder auslesen.

    Für Windows-Systeme kann man also netbeans.user.var mit System.getenv(“APPDATA”) + “/” + appID + “/var/” vorbelegen, soweit System.getenv(“APPDATA”) nicht null zurück gibt.

    Das grundsätzliche Problem ist, dass rechnerspezifische Ordner nicht einheitlich in allen OS existieren. Generell halte ich es aber für sinnvoll, dass man für den var-Ordner eine eigene Konfigurations-Variable hat. Wenn man netbeans.user.var nicht automatisch vorbelegen will, dann hat man doch die Möglichkeit über die app.conf einzugreifen.

    Beste Grüße!

  • 28. Februar 2011 um 11:05
    Permalink

    Das Konzept von %APPDATA% gibt es schon sein WindowsNT. Selbst in Windows95 gab es eine Entsprechung. Allerdings pocht MS erst seit XP oder noch stärker ab Vista darauf, dass die Anwendungen ihre Configdaten auch tatsächlich dort ablegen.

    Ich würde auch auf System.getenv() verzichten. Das macht NetBeans bisher genauso auch. Die Auflösung von z.B. des ${HOME} Eintrags aus der netbeans.conf erfolgt bereits im Launcher. Damit habe ich in den Java Quellen keine Systemplattformabfrage. Im Launcher kann man auch deutlich einfacher auf die “Shell Folder” von Windows zugreifen (API Aufrufe).

    Gruß
    Jens

    ps: Es wurde gerade auch ein neuer Bugeintrag angelegt, der das “.netbeans” Verzeichnis zumindest schon mal nach “APPDATA” zu verschieben.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


× 7 = vierzig zwei

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>