微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Weld SE 偏爱某些 beans.xml 类路径放置? 来自 src/main/resources来自 src/test/resources来自 src/main/resources 和 src/test/resources

如何解决为什么 Weld SE 偏爱某些 beans.xml 类路径放置? 来自 src/main/resources来自 src/test/resources来自 src/main/resources 和 src/test/resources

测试类路径中的 Gradle Weld SE beans.xml 导致不满意的依赖

上下文

运行创建单个 bean 新实例的单元测试只会在 beans.xml 类路径放置的某些变体中导致不满意的依赖项异常。 我已将场景简化为下面的片段。如果您需要更多信息,请告诉我,但这已经足够了。

package foo.bar;

public class MyBean {
    //nothing here.
}
package foo.bar;

import org.junit.jupiter.api.Test;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

class BeanTest {
    @Test
    void createBean() {
        final Weld weld = new Weld();
        final WeldContainer container = weld.initialize();
        final MyBean bean = containerl.select(MyBean.class).get();
    }
}

说明

如果只有一个 beans.xml 文件,则需要将其复制到 src/main 类路径中。 如果有两个,则复制它们的顺序很重要。 我想知道的是:

  1. 当只有一个时,为什么 Weld 无法在测试类路径中找到/搜索 beans.xml?
  2. 当有 2 个 beans.xml 文件时,为什么 Weld 需要先将 beans.xml 文件复制到 test-classpath 中,如果只有一个,它会完全忽略 test-classpath 上的文件?立>
  3. 如果 Weld 找到两个 beans.xml 文件一个在 main 上,一个在 test 上),最终会生成哪个 beans.xml 文件

当然,我在这里假设这是由于 Weld SE。但是,这可能是由于 gradle 或此设置的其他部分。任何输入表示赞赏。

版本

Gradle:6.5.1

Java:11.0.8

Windows:10 家

依赖项

dependencies {
    implementation group: 'jakarta.enterprise',name: 'jakarta.enterprise.cdi-api',version: '3.0.0'
    testImplementation group: 'org.jboss.weld.se',name: 'weld-se-core',version: '4.0.0.Final'
}

复制到 Gradle 类路径

来自 src/main/resources

作品
classes {
    doLast {
        copy {
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
        }
    }
}
classes {
    doLast {
        copy {
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
            into "$buildDir/classes/java/main/"
        }
    }
}
不起作用
classes {
    doLast {
        copy {
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
        }
    }
}
classes {
    doLast {
        copy {
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
            into "$buildDir/classes/java/test/"
        }
    }
}

来自 src/test/resources

作品
classes {
    doLast {
        copy {
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
        }
    }
}
classes {
    doLast {
        copy {
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
            into "$buildDir/classes/java/main/"
        }
    }
}
不起作用
classes {
    doLast {
        copy {
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
        }
    }
}
classes {
    doLast {
        copy {
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
            into "$buildDir/classes/java/test/"
        }
    }
}

来自 src/main/resources 和 src/test/resources

作品
classes {
    doLast {
        copy {
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
        }
    }
}
不起作用
classes {
    doLast {
        copy {
            from('src/main/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/main/"
            from('src/test/resources') { include 'meta-inf/beans.xml' }
            into "$buildDir/classes/java/test/"
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。