Wie organisieren Sie non-source-Ressourcen, die verfügbar sind auf dem Klassenpfad in Ihrem java-Projekt?

StackOverflow https://stackoverflow.com/questions/349787

Frage

In einem software-Projekt in java geschrieben Sie haben oft die Ressourcen, sind Teil des Projekts und sollten auf dem classpath.Zum Beispiel sind einige Vorlagen oder Bilder, die zugegriffen werden soll, über die classpath (getResource).Diese Dateien enthalten sein sollen, in eine erzeugte JAR-Datei.

Es ist klar, dass diese Ressourcen sollten Hinzugefügt werden, um die revision-control-system.Aber in welchem Verzeichnis diese Dateien?Parallel zur java-source-Dateien oder in einem anderen Verzeichnis, reproduziert auch das benötigte Paket-Struktur?

War es hilfreich?

Lösung

Ich ziehe Ihren letztere Lösung:ein separates Verzeichnis, das mimicks die Quellcode-Paket-Struktur.Auf diese Weise werden Sie nicht clobber Ihren source-code, wird aber direkt neben den kompilierten class-Dateien in die JAR-Datei verpackt.

Andere Tipps

Maven stellt Sie in src/main/resources/ Java-code würde wechseln Sie zu src/main/java/).Der Hauptgrund ist, dass Maven kompilieren von code in verschiedenen Sprachen und es macht Sinn, Sie zu halten getrennt, so ein kompilieren ist nicht verwirrt durch die Dateien für einen anderen.

Im Falle von Ressourcen Maven wird, ersetzen Sie die Variablen in Ihnen, bevor Sie Hinzugefügt werden, ein Glas, so Sie sind "kompiliert" Quellen.

Persönlich würde ich es vorziehen, die Ihnen zusammen mit dem Quell-code, wenn Sie sind dringend in Bezug auf bestimmte Teile des Codes, und wenn es nicht zu viele von Ihnen.

Aber wenn es Sinn macht, diese Dateien, um Ihre eigene Organisation, Struktur, oder, wenn es Hunderte von Dateien, dass wäre es schwer zu finden den Quellcode unter Ihnen, ich würde halten Sie Sie getrennt.

Es hängt von Ihren Vorlieben ab.Nachdem Sie gemischt mit dem Quell-code-Dateien macht refactorings wie umbenennen von Paketen einfacher wie die Ressourcen verschoben werden zusammen mit den Quellen), aber mit mehr als einer Handvoll Symbole, Bilder und Lokalisierung von Dateien, Sie erhalten ein Durcheinander von Dateien sehr einfach.

Mit den heutigen tools ist es auch nicht wirklich wichtig.Egal, ob Sie die Verwendung von Eclipse, Netbeans oder ein anderes Werkzeug, Sie alle ermöglichen es Ihnen, binäre Pakete mit einem anderen layout als source-code.Also am Ende, Sie können es tun, wie Sie wollen.

Persönlich versuche ich zu vermeiden, mischen-Quelle mit Ressourcen, weil ich in der Regel ändern die Ressourcen sehr selten, aber der Quellcode sehr Häufig.

Ich in der Regel wie folgt ab:

project/src
project/resources
project/classes
project/lib
project/dist

Beide src und Ressourcen die Paket-Struktur und der build-Datei nehmen Klassen und Ressourcen als input für das Glas, die in dist.

Beim laufen intern die classpath ist so etwas wie: lib;Klassen;Ressourcen;

Wenn die app installiert das Installationsprogramm erstellt und stellen die Ressourcen-Verzeichnis, intakt in der instalation.

Sie können diese Dinge in den Klassenpfad, wenn Ihr build-tool nicht verwirrt werden.Eclipse wird nicht versuchen zu kompilieren, jpegs und weder Ameise, so gibt es nicht viel zu befürchten.Das schöne ist, dass wenn Sie viele Dinge, die Sie können halten Sie zusammen, organisiert durch Funktionalität, im Gegensatz zu Datei-Typ.

Wir tun dies, in dem ich arbeite;wir haben die E-Mail-Nachrichten, die erfordern ein wenig code und eine Handvoll statischer Ressourcen.All diese Dinge sind gehalten, die zusammen in einem Ordner in der java-Quellcode-Pfad;wir können hinzufügen und entfernen von E-Mail aus dem system, ganz einfach, ohne zu vergessen, Dinge oder Fehler zu machen wie src/resource Pfade Stimmen nicht überein oder verwaiste Dateien in einem Baum nicht in einem anderen Baum.

Wie schon gesagt, es ist bis zu Ihnen und unterscheiden können pro Projekt.Zum Beispiel mit Wicket, es ist durchaus üblich und sinnvoll zu halten .html Dateien direkt zu den Klassen.Auch habe ich oft eine Konfiguration zusammen mit dem Quell-code - META-INF, WEB-INF, Protokollierung.

Machen Maven nehmen Sie Ressourcen von der Quelle Baum, verwenden Sie diese:

<build>
   <resources>
     <resource>
         <directory>src/main/resources</directory>
     </resource>
     <!-- Web - Wicket -->
     <resource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </resource>
  </resources>

  <testResources>
     <testResource>
         <directory>src/test/resources</directory>
     </testResource>
     <!-- Web - Wicket -->
     <testResource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </testResource>
  </testResources>

Der Hauptgrund, Sie zu halten, Ressourcen getrennt ist (imho) die Trennung von Arbeit Rollen.E. g.wenn Sie ein Projekt haben, mit übersetzungs-teams, die Sie halten würde, die Ressourcen mit Zeichenfolgen getrennt von code und mit verschiedenen SCM-Privilegien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top