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-INF
的persistence.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 项目...在哪里存储单元测试所需的超大文件?
Android Gradle 插件TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )