CDI: beans.xml, где я вам помещаю?

Я использую Weld как реализацию CDI. Мой интеграционный тест, который пытается собрать экземпляр объектного графа. Контейнер Weld работает хорошо, когда у меня есть пустой beans.xml в src/test/java/META-INF/beans.xml. Вот этот простой тест:

public class WeldIntegrationTest {
    @Test
    public void testInjector() {
        new Weld().initialize();
        // shouldn't throw exception
    }
}

Теперь, когда я запускаю mvn clean install, я всегда получаю: Missing beans.xml file in META-INF!

Мои корневые папки - это "src" и "web", которые содержат папку WEB-INF, но я также попытался использовать структуру maven по умолчанию и переименовал "web" в "webapp" и переместил ее в src/main. Я пробовал все разумные места, о которых я мог подумать:

 - src/main/java/META-INF/beans.xml
 - src/test/java/META-INF/beans.xml
 - web/WEB-INF/beans.xml
 - src/main/webapp/WEB-INF/beans.xml
 - src/main/webapp/META-INF/beans.xml
 - src/main/webapp/META-INF/(empty) and src/main/webapp/WEB-INF/beans.xml

Пока ничего не работает:/

Ответ 1

Для упаковки EJB и JAR вы должны поместить beans.xml в src/main/resources/META-INF/.

Для упаковки WAR вы должны поместить beans.xml в src/main/webapp/WEB-INF/.

Помните, что в директории src/main/java и src/test/java должны быть помещены только файлы .java. Ресурсы, такие как .xml, должны быть в src/main/resources.

Ответ 2

Чтобы дополнить вышеупомянутый ответ, вот официальная ссылка на это: https://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

цитата:

Приложение, использующее CDI, должно иметь файл с именем beans.xml. Файл может быть полностью пустым (он имеет контент только в определенных ограниченных ситуациях), но он должен присутствовать. Для веб-приложения файл beans.xml должен находиться в каталоге WEB-INF. Для модулей EJB или JAR файл beans.xml должен находиться в каталоге META-INF.

Ответ 3

http://www.javamonamour.org/2017/11/cdi-in-java-se-8.html здесь вы можете увидеть, где я положил его с успехом, то есть под src/META-INF. Сообщение содержит полный рабочий пример CDI в Java SE.