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

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


person Xorty    schedule 24.10.2012    source источник
comment
В моем проекте CDI файл beans.xml находится в каталоге src\main\webapp\WEB-INF, а в моем файле войны он также находится в каталоге WEB-INF.   -  person kaos    schedule 24.10.2012


Ответы (3)


Для упаковки 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.

person maba    schedule 24.10.2012
comment
В моем случае я тестирую cdi-unit (использует Weld), я должен поместить его в свой src - person dalvarezmartinez1; 10.01.2014
comment
@dalvarezmartinez1 Бьюсь об заклад, вы могли бы переместить beans.xml в /src/main/resources в вашем случае; он должен оказаться в папке «классы» после сборки - person Jon Onstott; 01.09.2015
comment
@JonOnstott Ты прав. На самом деле сейчас он находится в src/main/webapp/WEB-INF, но это только потому, что мы используем gradle, а плагин war ожидает его в этом месте по умолчанию. Я бы сказал, что все зависит от инструмента, который упаковывает war/jar. - person dalvarezmartinez1; 04.09.2015
comment
Для меня ли jar or war я должен был поставить его в /src/main/resources/WEB-INF. В любом случае спасибо - person Jose Mhlanga; 28.03.2020

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

Цитировать:

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

person 99Sono    schedule 24.08.2015
comment
В Java EE 7 beans.xml больше не является обязательным. См. учебник по Oracle Java EE. - person José Andias; 05.04.2016

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

person Pierluigi Vernetto    schedule 05.11.2017