Google 应用引擎的 gradle 单元测试在哪里期望 persistence.xml?

Posted

技术标签:

【中文标题】Google 应用引擎的 gradle 单元测试在哪里期望 persistence.xml?【英文标题】:Where do gradle unit tests for Google app engine expect persistence.xml? 【发布时间】:2015-05-27 15:51:41 【问题描述】:

我已经使用带有 Datanucleus JPA 提供程序的 maven 原型项目创建了一个 Google 应用引擎项目,基本上遵循 Google 应用引擎文档。

运行 maven 目标“测试”时一切正常。

现在我不得不将项目集成到 android Studio 中,并希望将构建脚本迁移到 gradle。我将所有依赖项从 pom.xml 复制到 build.gradle 并且项目构建良好。但是,所有访问 Google 数据存储的测试都会失败。

在测试输出期间,我收到以下消息:

警告:在当前线程的 CLASSPATH 中找不到 META-INF/persistence.xml 文件!

我检查了在构建过程中创建的build 文件夹,没有文件夹包含来自src/main/webapp/WEB-INF/classes/META-INFpersistence.xml

但是,使用 maven,它被正确地放在了 target/myapp-1.0-SNAPSHOT/WEB-INF/classes/META-INF 文件夹中。

我尝试使用 gradle 复制任务将 persistence.xml 复制到各个位置,例如 build/classes/META-INF build/classes/webapp/WEB-INF/classes/META-INF 等,但没有任何效果。

【问题讨论】:

虽然我对 gradle 等的了解还不够,无法明确回答这个问题,但全能的 Goog 给了我this SO question,这可能会有所帮助。 感谢您指出这一点。但是,我的项目正在构建 WAR。 persistence.xml 已正确放入 WEB-INF/classes/META-INF 文件夹。这不是问题。问题是在运行单元测试时(没有构建 WAR),persistence.xml 必须放在somewhere。我在某个地方要求这个。 我的方法是在每个文件夹中放 1 直到它运行 :) 这看起来很蹩脚但已被证明是有效的 @deW1 你可以把它们放在任何地方并进行二分搜索…… 相关? ***.com/questions/15397336/… 【参考方案1】:

仅仅因为文件被放置在一个目录中并不意味着它在 CLASSPATH 中。

将包含persistence.xml 的META-INF 文件夹放在/src/main/resources 中。

【讨论】:

这实际上是正确的。谢谢你一千次。但是您能否进一步详细说明,为什么当 Web 文件应该放在 webapp 下时,Gradle 构建需要 resources 下的文件? 他可能会,如果他没有(最有可能)复制他的答案,但不知道从this answer 的评论中的含义,来自 Travis J 链接的问题. 查看此答案以获取有关 mvn 如何重新排列事物 ***.com/questions/1297473/… 的更多信息 正如skullkid 发布的链接所说,Maven 的约定是源集main 的所有非源文件都应该进入src/main/resources。 Gradle 遵循 Maven 约定,除非您另有说明。 我不想再强调这一点了,但是 Maven 使用放在 webapp 下的文件可以很好地构建,而 Gradle 没有。当然,这可能意味着 Gradle 遵循 Maven 约定比 Maven 本身更严格。

以上是关于Google 应用引擎的 gradle 单元测试在哪里期望 persistence.xml?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google App Engine 中部署 Spring Boot gradle 应用

Scala / Gradle 项目...在哪里存储单元测试所需的超大文件?

Gradle android插件和android测试?

gradle 跳过单元测试的3种方法

gradle 跳过单元测试的3种方法

Android Gradle 插件TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )