在GWT中为ClientBundle放置资源的位置?

时间:2013-05-02 13:55:55

标签: java gwt

我希望将静态资源保留在类树之外,但是将它们保存在src/main/resources树中。虽然它们应该使用与java类相同的路径,例如:

打包my.path.to;

class ResourceBundle extends ClientBundle {
  @Source("src/main/resources/my/path/to/ResourceBundle/myIcon.png")
  ImageResource myIcon();
}

我是否总是必须编写@source路径来引用它们?或者我可以告诉ClientBundle只查看与java类相同的目录,但只是在资源中?

2 个答案:

答案 0 :(得分:5)

如果您未使用ImageResource@Source进行注释,则ImageResourceGenerator将通过ResourceGeneratorUtil.findResources()使用 相对于ClientBundle包的路径,附加方法名称并使用一组默认扩展来解析ImageResource源路径(按顺序拾取扩展名:png,jpg,gif,bmp;请参阅如何通过ImageResource注释@DefaultExtensions

因此,如果您将图像放入ClientBundle的同一个包中,它们将自动解析,甚至不使用@Source注释。如果您的图像具有相同的名称但扩展名不同,则根据之前的顺序选择第一个图像。

我不是maven用户,但apparently如果您在src/main/resources中保留相同的包结构,则您的图片将以相同的方式被提取。从未尝试过。

答案 1 :(得分:2)

默认情况下,它将与您的java类位于同一目录中。我通常将我的图形放在resorces包的子包中。这使我的java保持清洁和分离,我不必做绝对路径。我相信../相对路径也适用,如果你想这样,但我把它放在一个子资源包中似乎更干净。

com.vf.client.resources
com.vf.client.resources.images
com.vf.client.resources.css

/**
 * Draggable cursor icon.
 * 
 * <br />
 * Example
 * 
 * <img src="images/cursorDragArrowSmall.png" />
 * @return ImageResource 
 */
@Source("images/cursorDragArrowSmall.png")
ImageResource cursorDragArrowSmall();