【发布时间】:2023-02-17 11:33:57
【问题描述】:
我在 Wildfly 24 中部署我的应用程序时遇到一些问题。 我创建了一个模块,其中包含一些有助于部署执行的 jar。其中一些 Jar 具有 @Entity 和 @WebService 等注释。
根据 Wildfly 文档,我在 standalone.xml 中创建了一个全局模块,例如:
<global-modules>
<module name="server.defs" annotations="true" />
</global-modules>
此外,我已经(通过 Maven)为模块中的 jar 和部署的 jar 创建了 jandex 索引。打开罐子时,我可以在 META-INF 文件夹中看到 jandex.idx。为此,我在 pom.xml 中使用了以下内容:
<plugin>
<groupId>org.jboss.jandex</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
但是当我启动服务器时,它就像没有解析注释一样。 Hibernate 无法找到带有@Entity 注释的类,并且无法部署模块中使用@WebService 注释的类。
如果我不使用模块,一切都会正确部署.. 任何人都知道问题是什么?
谢谢你!
【问题讨论】:
-
模块不会,也不能真的被扫描以查找像那样的 Web 组件。没有上下文,因为它与部署相关联。
-
谢谢你的回答。只是一些后续问题: - 那么如果不扫描模块声明中的这个“annotations = true”的目的是什么? - 使用全局目录结果是否相同? - 有没有比部署所有带有我在模块中的注释的 jar 更好的方法?
-
这可能取决于注释。例如,CDI 注释可能会像 bean 可以存在于 JAR 中一样工作。但是,
@WebServlet等注释需要 Web 部署才能工作。我必须阅读规范,但我不认为它会扫描 servlet 的依赖关系。我可能是错的。简而言之,这完全取决于 :)annotations="true"虽然只是意味着您在模块中证明了 Jandex 索引。
标签: java maven module annotations wildfly