部署应用程序会跳过资源文件

时间:2017-08-10 13:31:24

标签: java eclipse google-app-engine

我在这个问题上撞了我的头......我有一个(迄今为止相当简单的)谷歌应用程序引擎项目。在运行期间,我想读入一些XML文件(资源文件,而不是可服务的静态文件)进行处理。做了一些研究后,我决定通过servlet上下文读取资源文件(类似于以下内容)。在开发服务器上工作正常。

final InputStream inputStream1 = servletContext.getResourceAsStream(" /" + pathToXmlFile);

问题:不在云端工作。首先,我认为我加载资源的方式是错误的,但我注意到有问题的XML文件似乎根本没有上传。它目前位于:

  

src / main / webapp / data / stuff.xml和   的src /主/ web应用/ WEB-APP /数据/ stuff.xml

(我不确定放置XML文件的位置,因此我将其复制到两个位置。)部署日志显示了如何跳过文件:

2017-08-10 13:13:42,451 DEBUG root跳过上传[data / stuff.xml]

2017-08-10 13:13:42,461 DEBUG root跳过上传[WEB-INF / data / stuff.xml]

我已经尝试了许多事情,但没有成功,以便部署文件。我试过的事情:

  • 清除临时暂存目录
  • 手动清理构建
  • 重命名目录/文件
  • 将文件包含在classes目录中
  • 使用appengine-web.xml文件中的resource-files部分(使用各种语法删除它)
  • 从云中删除旧版本的应用
  • 重启Eclipse

仅供参考,appengine-web.xml的当前内容

<resource-files>
  <include path="/data/*.xml" />
  <include path="data/*.xml" />
</resource-files>

(不确定是否需要斜杠......)

请注意,部署确实适用于已更改/新的.class文件,因此我对Java类的更改上传得很好。不知何故,部署机制还没有意识到还必须上传XML文件。

仅供参考 - Windows,Eclipse 4.7,Java 8,云工具1.2.0.201706082053

任何帮助都表示赞赏,特别是如果有人知道部署机制如何决定部署哪些文件!

2 个答案:

答案 0 :(得分:1)

试试这个:

<resource-files>
  <include path="/data/**.xml" />
</resource-files>

这应该包括data/及其子目录中的所有xml文件。

他们documentation on include and exclude syntax,因为我确定你知道,非常吝啬。我很确定你想要那个双星号,而且更确定你想要领先的斜杠。我现在正试图在其上找到更多信息,如果我这样做,我会发布一个链接。

答案 1 :(得分:0)

感谢Brendan,**做了伎俩。仅供参考,设置如下:

<resource-files>
  <include path="/data/**.xml" />
</resource-files>

<static-files>
  <exclude path="/data/**.xml" />
</static-files>

使用单个*对于&#34;任何XML文件都不够好,它必须是**。作为资源文件条目的副作用,XML文件现在突然也可以作为静态文件使用,可通过浏览器访问。因此静态文件中的排除部分可以防止暴露这种情况。不确定这是否过于优雅或最简单/最干净的方式,但它的工作原理......

仅供参考,&#34;数据&#34;目录直接包含在&#34; webapp&#34;下面,并且访问资源的代码是:servletContext.getResourceAsStream(&#34; /data/stuff.xml");

注意我还必须手动&#34;触摸&#34; XML文件,以便上传。

再次感谢。