2009-10-01 44 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

相关问题