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.