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!

Мои корневые папкиЦСИ» а также "веб» который содержит папку WEB-INF, но я также попытался использовать структуру по умолчанию maven и переименовалвеб» к "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

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

 kaos24 окт. 2012 г., 21:49
В моем проекте CDI файл beans.xml находится в каталоге src \ main \ webapp \ WEB-INF, а в моем файле war он также находится в каталоге WEB-INF.

Ответы на вопрос(3)

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

цитата:

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

 José Andias05 апр. 2016 г., 12:08
В Java EE 7beans.xml больше не является обязательным. УвидетьOracle Java EE Учебное пособие

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

Решение Вопроса

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

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

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

 dalvarezmartinez110 янв. 2014 г., 16:36
В моем случае яЯ тестирую cdi-unit (использует Weld), я должен поместить его в мой src
 Jon Onstott31 авг. 2015 г., 23:57
@ dalvarezmartinez1 Бьюсь об заклад, вы могли бы переместить beans.xml в / src / main / resources в вашем случае; это должно в конечном итоге вклассы папка после сборки
 dalvarezmartinez104 сент. 2015 г., 11:38
@JonOnstott Вы правы. На самом деле сейчасs в src / main / webapp / WEB-INF, но это только потому, что мыВы используете gradle, и плагин war ожидает его в этом месте по умолчанию. Я бы сказал, что все зависит от инструмента, который упаковывает войну / банку.
 Xorty24 окт. 2012 г., 22:31
Отлично, в моем случае это работает в src / main / resources / META-INF

Ваш ответ на вопрос