Jakarta ee 错误消息";cvc复杂类型。4:属性';bean发现模式';必须出现在元素';豆子&引用;

Jakarta ee 错误消息";cvc复杂类型。4:属性';bean发现模式';必须出现在元素';豆子&引用;,jakarta-ee,jboss,cdi,Jakarta Ee,Jboss,Cdi,我有一个简单的JavaEE项目,在WEB-INF下有一个简单的beans.xml。它基本上不包含任何内容。但我总是收到这样一条错误消息:“cvc复杂类型。4:属性‘bean发现模式’必须出现在元素‘beans’上。” 这个信息是什么意思?我在谷歌上搜索了一下,但什么也没找到。这可能是什么原因造成的 <?xml version="1.0" encoding="UTF-8"?> <!-- Marker file indicating CDI should be enabled --

我有一个简单的JavaEE项目,在WEB-INF下有一个简单的beans.xml。它基本上不包含任何内容。但我总是收到这样一条错误消息:“cvc复杂类型。4:属性‘bean发现模式’必须出现在元素‘beans’上。”

这个信息是什么意思?我在谷歌上搜索了一下,但什么也没找到。这可能是什么原因造成的

<?xml version="1.0" encoding="UTF-8"?>
<!-- Marker file indicating CDI should be enabled -->
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd">

    <!-- Uncomment this alternative to see EJB declarative transactions in 
        use -->
    <!-- <alternatives> -->
        <!-- <class>org.jboss.as.quickstarts.greeter.domain.EJBUserDao</class> -->
    <!-- </alternatives> -->
</beans>

消息明确指出属性
bean发现模式
应该在元素
bean
中,这可能是您的容器的要求。尝试按如下方式为bean元素提供属性:

bean-discovery-mode = "annotated"
原因是您使用的是CDI1.1,因此
bean发现模式
是一个强制属性。您可以通过读取以下URL中的XSD文件进行确认:

http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd

请特别注意以下部分:

<xs:attribute name="bean-discovery-mode" use="required">
            <xs:annotation>
                <xs:documentation>
                   It is strongly recommended you use "annotated". 

                   If the bean discovery mode is "all", then all types in this
                   archive will be considered. If the bean discovery mode is
                   "annotated", then only those types with bean defining annotations will be
                   considered. If the bean discovery mode is "none", then no
                   types will be considered.
                </xs:documentation>
            </xs:annotation>

强烈建议您使用“注释”。
如果bean发现模式为“all”,则此模式中的所有类型
将考虑归档。如果bean发现模式为
“annotated”,则只有那些具有bean定义注释的类型才会被删除
考虑过的。如果bean发现模式为“none”,则为no
类型将被考虑。

是的,这很有效。但是这个例子来自JBossWildfly快速启动项目。我想它不需要任何修改就可以工作。为什么不起作用呢?这个例子可能是为CDI1.0编写的,而您似乎正在使用CDI1.1。查看我的更新答案。此错误是仅出现在IDE中还是出现在应用程序服务器中?