2009-10-01 2 views
15

Ich habe einige JavaScript-Dateien, eine Haupt-HTML-Datei, eine CSS-Hauptdatei und einige CSS-Dateien, die in die Hauptdatei importiert werden.Wo lege ich statische Dateien für die GWT App ab? Kriegsordner oder Öffentlicher Ordner?

Ich verstehe, dass ich statische Dateien an zwei Stellen setzen kann: a) der 'Krieg' Ordner; oder b) der Ordner 'public'.

Wo ist der beste Ort, um meine statischen Dateien zu platzieren? Werden die beiden Standorte unterschiedlich behandelt? Gibt es eine "Best Practice" zu diesem Thema?

Antwort

17

Der Unterschied zwischen den beiden Speicherorten besteht darin, dass die Dateien in den öffentlichen Ordnern vom gwt-Compiler in den Ordner 'your modul' im Ordner 'war' kopiert werden. Dies bedeutet, dass wenn Sie den "Krieg" (zum Beispiel über das Google-Plugin auf die Google-Appengine) bereitstellen, die Dateien aus dem "öffentlichen" Ordner nicht auf der obersten Ebene sind.

Wenn Sie zum Beispiel eine index.html im Ordner 'public' mit dem gwt-Modul 'mymodule' haben und es auf www.example.com bereitstellen, sieht es folgendermaßen aus: Sie müssen darauf zugreifen:

www.example.com/mymodule/index.html 

Wenn Sie die index.html in den 'Krieg' Ordner haben, erhalten Sie:

www.example.com/index.html 

zusammen. Ihre Zielseite sollte sich im Ordner "WAR" befinden. Ressourcendateien, die von der Zielseite verwendet werden, können auch hier gespeichert werden (CSS, Bilder). Jede andere Ressourcendatei, auf die in einer beliebigen gwt-Moduldatei (oder einem Code wie Bildern) verwiesen wird, sollte im Ordner 'public' des gwt-Moduls gespeichert werden.

+2

Hält diese Antwort noch für GWT 2.6? Mein Projekt scheint keinen öffentlichen Ordner zu haben. Auf der anderen Seite, wenn ich etwas zum Ordner "war" hinzufügen, wird es gelöscht, sobald ich das Projekt neu kompiliere. Also, wo sollten statische Dateien jetzt abgelegt werden? –

6

Die neue Art der Arbeit in GWT ist die Verwendung des Kriegsordners.

Wenn Sie jedoch eine wiederverwendbare Widgetbibliothek erstellen, die in einer GWT-Anwendung verwendet wird, sollten Sie die Ressourcen in den öffentlichen Ordner stellen. Der Compiler stellt sicher, dass die Dateien automatisch im generierten Paket enthalten sind.

+2

Wie setzen Sie die CSS im Krieg Ordner und dann verweisen? Mein Problem ist, dass sich meine relative URL in der Zukunft ändern kann und ich nichts ändern möchte, was es im öffentlichen gwt-Ordner garantiert, – AlfaTeK

+0

zu sehen, siehe auch http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html # DevGuideDirectoriesPackageConventions (Richtlinien 6.) –

+0

Wenn Sie jedoch etwas in den Ordner 'war' setzen, wird es bei der Neukompilierung des Projekts gelöscht. Wo sollten stattdessen statische Ressourcen platziert werden? –

3

Wie ich es sehe, hängt es Ihre Anforderungen an, aber lassen Sie uns zuerst zu einem sprechenden Beispiel beginnen ...

Ich finde die documentation darüber (sollte GWT 2.6.0 sein) zu falsch oder zumindest unvollständig/verwirrend. Wie ich es sehe (Ich bin kein Guru so bitte korrigieren Sie mich, wenn meine Untersuchungen sind falsch!) ich am folgenden Beispiel proj Struktur suchen

myproj/ 
    src/my/gwtproj/ 
    client/ 
     img/ 
     foo1.png 
     AppClientBundle.java 
     foo2.png 
    public/ 
     img/ 
     foo3.png 
     foo4.png 
    war/ 
    img/foo5.png 
    foo6.png 
    .classpath 
    .project 

Stellen können wir (oder auch nicht) notwendig solche Ressourcen in einigen AppClientBundle-Schnittstelle (oder eine andere Anwendung Referenz Kontext) zu verweisen:

interfaces AppClientBundle extends ClientBundle { 

    @Source("img/foo1.png") 
    ImageResource fooImg(); 
} 

Dann scheint es hängen von Ihrer Anforderungen, zB:

  • R. A) diese Ressourcen (wie Bilder) sind im Anwendungscode refered zu, z.B. in unserer AppClientBundle Schnittstelle über @Source Anmerkungen
  • R. B) diese Ressourcen von Ordnern gruppiert werden, zum Beispiel foo2.png gegenimg/foo1.png
  • R.c) Diese Ressourcen sollten außerhalb eines bestimmten URL-Kontextpfads für eine bestimmte Anwendung verfügbar sein, z. wenn sie als Widget-Bibliothek verwendet wird, z.B. http://host1/gwtapp1/foo4.png vs. http://host1/gwtapp2/foo4.png
  • R.d) Diese Ressourcen müssen anwendungsunabhängig (z. B. extern) URL-referenziert sein, z. http://host1/gwtapp1/foo4.png vs. http://host1/foo6.png

Hier ist, was man tun kann (Möglichkeiten) und es ist Auswirkungen in Bezug auf R. * oben:

  • S.1) (allgemein empfohlen, wie ich sehe, es) schön Ordner-strukturierte Ressourcen unter my.gwtproj.client (hier zB foo1.png)
    • diese Weise @Source("img/foo1.png")...
    • in der Dokumentation funktioniert gut über sie über einige public Ordner (in meinem Fall my.gwtproj.public) speek, aber es als Paket in Eclipse zu schaffen macht mich das nicht zulassen (seit public ist ein reserviertes Java Schlüsselwort, aber es über die Navigator Sicht funktioniert die Schaffung)
      • jedoch, auf diese Weise die @Source oben nicht (wahrscheinlich nicht funktionieren, weil es ein Problem mit der relativen AppClientBundle Datei ist Systemstandort)
      • dennoch, wenn die Ressource öffentlich verfügbar unter dem Anwendungskontext sein sollte, kann man es über diesen public Ordner zu tun haben
  • S.2) setzen „ungruppierten“ Ressourcen direkt unter myproj/war, z projdir/war/foo6.png
    • so kann es in Annotationen verwendet werden, z. @Source
    • und es kann außerhalb der Anwendung selbst über z. http://host1/foo6.png
  • S.3) setzen Ordner strukturierte Ressourcen unter myproj/war, z.B. projdir/war/img/foo5.png
    • im Gegensatz zu S.2) @Source("img/foo5.png") wäre es in der xxx.gwt.xml Datei nicht funktioniert mehr
+0

Eine sehr umfangreiche Analyse, aber es sollte wirklich eine neue Frage sein. Und in diesem Fall sollten Sie besser strukturieren, was Sie fragen, andernfalls wird es wahrscheinlich als "unklar, was gefragt wird" gekennzeichnet. –

+1

Mit Blick auf die ursprünglichen Fragen, die Überschrift, das Google-Ranking und die gleichen Probleme usw. Ich finde meine Antwort mehr als passend und sehe nicht, warum wir eine weitere doppelte Frage erstellen sollten. Wenn ich an einigen Punkten falsch liege, werde ich es hier glücklicherweise korrigieren, wenn ich darauf hingewiesen werde. –

+0

Das war hilfreich, danke, ich hatte noch nicht von [ClientBundle] gehört (http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html). Ich habe ein einfaches [Beispielprojekt] erstellt (https://github.com/donkirkby/webandnative/blob/assets/html/src/com/github/donkirkby/webandnative/client/WebAndNativeEntryPoint.java#L22), um zu zeigen, wie man es setzt up die Asset-Dateien und fügen Sie sie in einem Bündel. –

Verwandte Themen