【发布时间】:2020-07-15 16:10:23
【问题描述】:
我知道已经有人问过很多类似的问题(例如this、this 等),但没有一个可以帮助我,所以我决定再次提出这个问题——我已经挣扎了好几个小时了真的没办法了。
我有一个 Java EE 项目,它有一个简单的 servlet,它接受来自 HTML 表单的数据,在外部服务中执行一些查询(使用 REST 和 JAX-RS)并返回结果。我现在的目标是将它部署在独立的 Tomcat 服务器上。我试图实现它的方法是导出 WAR 工件并将其复制到 Tomcat 的 webapps 目录。
它在使用 JAX-RS 发送 REST 请求之前一直有效 - 然后我总是收到错误:
WELD-ENV-000016: Missing beans.xml file in META-INF
我根本没有使用这个文件,但是当我读到它时,它必须在那里,即使是空的......所以我试图把它放在我能想到/读到的任何位置,包括:
/web/META-INF
/web/WEB-INF
/src/main/webapp/META-INF
/src/main/webapp/WEB-INF
/src/main/resources/META-INF
/src/main/resources/WEB-INF
当我在部署后检查 Tomcat 创建的输出 .war 文件或目录时,beans.xml 存在于 META-INF 和 WEB-INF 目录中。
初始化 Weld 并执行这些查询在 Intellij IDE 内的单元测试中运行良好 - 这里唯一的要求是将包含 WEB-INF 和 META-INF 的目录标记为“Resources Root”。
在我的 facet 配置中,我将包含 WEB-INF 和 META-INF 的目录标记为“Web Resource Directory”,并且 *'Web' facet resources' 包含在我的工件中。
有什么想法吗?我是否从根本上误解了某些东西,这里的内部 Weld 是否需要不同的、单独的 META-INF 或其他东西?
【问题讨论】:
-
在 EE 服务器上,您拥有开箱即用的 CDI impl。迁移到 servlet 时,您需要做一些额外的工作。在这种情况下,这意味着为 Weld 添加额外的 JAR,请参阅 this part of the doc。你做到了吗?
-
我已经尝试执行那里列出的步骤(向模块添加依赖项并创建/修改 context.xml 和 web.xml),遗憾的是错误仍然存在。
标签: java tomcat deployment weld