2009-10-01 70 views
15

我有一些JavaScript文件,一個主要的HTML文件,一個主要的CSS文件以及一些導入到主文件中的CSS文件。我在哪裏爲GWT應用程序添加靜態文件?戰爭文件夾或公共文件夾?

我明白我可以把靜態文件放在兩個地方:a)'war'文件夾;或者b)「公共」文件夾。

哪裏是放置我的靜態文件的最佳位置?這兩個地點的處理方式不同嗎?在這個問題上是否存在「最佳實踐」?

回答

17

2個位置之間的區別在於公共文件夾中的文件被gwt編譯器複製到'war'文件夾中的'your module'文件夾中。這意味着如果你部署'戰爭'(例如通過谷歌插件谷歌appengine)'公共'文件夾中的文件不在頂層。例如,如果您在'public'文件夾中使用名爲'mymodule'的gwt模塊創建了index.html,並將其部署到www.example.com,它看起來如下所示,您需要通過以下方式訪問它:

www.example.com/mymodule/index.html 

如果你在 '戰爭' 文件夾中的index.html,您可以:

www.example.com/index.html 

彙總。您的着陸頁應該位於「戰爭」文件夾中。目標網頁使用的資源文件也可以存儲在此處(CSS,圖像)。在任何gwt模塊文件(或代碼,如圖像)中引用的任何其他資源文件都應存儲在與gwt模塊相關的'public'文件夾中。

+2

這個答案仍然適用於GWT 2.6嗎?我的項目似乎沒有「公共」文件夾。另一方面,如果我將任何內容添加到'war'文件夾,只要我重新編譯項目就會被刪除。那麼,現在應該在哪裏放置靜態文件? – 2014-03-25 10:06:08

6

在GWT中工作的新方法是使用war文件夾。

但是,如果您的項目是在GWT應用程序中使用的可重複使用的小部件庫,那麼您應該將資源放在公用文件夾中。編譯器將確保文件自動包含在生成的包中。

+2

你怎麼把CSS在戰爭中的文件夾,然後在xxx.gwt.xml文件中引用呢?我的問題是,我相對URL可以在將來改變,我也不想改變任何事情保持它在公衆GWT文件夾可以保證 – AlfaTeK 2011-05-11 22:32:37

+0

也http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects看到。html#DevGuideDirectoriesPackageConventions(指導方針6.) – 2014-03-25 09:17:03

+0

但是,當將任何東西放入'war'文件夾時,它將在重新編譯項目時被刪除。應該在哪裏放置靜態資源? – 2014-03-25 10:07:00

3

在我看來,這取決於你的要求,但讓我們開始在講例如第一...

我找到documentation(應該是GWT 2.6.0)這個是不正確的,或者至少殘缺/混亂。當我看到它(我不是大師,所以請糾正我,如果我的調查是錯的!)我在看下面的例如凸出結構

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 

假設我們可以(或者可以不)需要在一些AppClientBundle接口(或其他應用參考上下文)來引用這些資源:

interfaces AppClientBundle extends ClientBundle { 

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

然後好像取決於您的需求,如:

  • R.A)這些資源(如圖片)是在應用程序代碼,例如refered到在我們通過@Source註釋
  • R.b)AppClientBundle界面這些資源是由,例如分組foo2.pngimg/foo1.png
  • R.C)這些資源應該是可用的外面一些特定的應用程序的URL上下文路徑,例如如果用作小部件庫,例如http://host1/gwtapp1/foo4.pnghttp://host1/gwtapp2/foo4.png
  • R.d)這些資源需要是應用程序無關的(例如外部)URL參考,例如, http://host1/gwtapp1/foo4.pnghttp://host1/foo6.png

這裏是一個可以做(可能性),它的意義就R. *以上:

  • 臨1)一般建議,因爲我看到它)把好聽文件夾結構的資源my.gwtproj.client(這裏例如下3210
    • 這種方式上面,他們磺化聚醚醚酮的一些public文件夾(在我的情況my.gwtproj.public@Source("img/foo1.png")...工作在文檔精細
    • ,但創造它作爲Eclipse的一個包不我讓這個(因爲public是一個保留的Java關鍵字,而是通過Navigator視圖中創建它的工作原理)
      • 然而,這樣上面的@Source不工作(可能是因爲它與相對AppClientBundle文件中的問題系統位置)
      • 但如果將資源應用環境下可公開獲得的一個可能通過這public文件夾做
  • 第2頁)直接就把「取消組合」資源在myproj/war之下,例如projdir/war/foo6.png
    • 這種方式,可以使用/註釋內找到,例如@Source
    • 並且它可以通過例如在應用程序本身的外部引用http://host1/foo6.png
  • P.3)文件夾結構的資源下myproj/war,例如projdir/war/img/foo5.png
    • 相反,第2頁)@Source("img/foo5.png")不會工作了
+0

非常廣泛的分析,但它確實應該是一個新問題。在這種情況下,你應該更好地構建你的問題,否則它可能會被標記爲「不清楚要問什麼」。 – 2014-03-25 16:06:27

+1

看着原來的問題,標題,谷歌排名和有相同的問題等。我發現我的答案比擬合,並沒有看到,爲什麼我們應該創建另一個重複的問題。如果我在某些方面可能有錯,但如果指出,我會很慶幸地在這裏糾正它。 – 2014-03-26 09:58:52

+0

這很有幫助,謝謝,我還沒有聽說過[ClientBundle](http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html)。我創建了一個簡單的[示例項目](https://github.com/donkirkby/webandnative/blob/assets/html/src/com/github/donkirkby/webandnative/client/WebAndNativeEntryPoint.java#L22)來展示如何設置建立資產文件並將其包含在一個包中。 – 2014-12-16 07:32:56

相關問題