CDI: beans.xml, where do I put you?
cdi, jakarta-ee, java, jboss-weld, maven
Solution
For EJB and JAR packaging you should place the `beans.xml` in `src/main/resources/META-INF/`.
For WAR packaging you should place the `beans.xml` in `src/main/webapp/WEB-INF/`.
Remember that only `.java` files should be put in the `src/main/java` and `src/test/java` directories. Resources like `.xml` files should be in `src/main/resources`.
Problem
I am using Weld as CDI implementation. My integration test, that tries to assemble object graph instantiating Weld container works well, when I have empty beans.xml in `src/test/java/META-INF/beans.xml`. Here is that simple test: ``` public class WeldIntegrationTest { @Test public void testInjector() { new Weld().initialize(); // shouldn't throw exception } } ``` Now when I run `mvn clean install`, I always get: `Missing beans.xml file in META-INF!` My root folders are "src" and "web" which contains WEB-INF folder, but I also tried to use default maven structure and renamed "web" to "webapp" and moved it to src/main. I tried all the reasonable locations I could thought of: ``` - 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 ``` Nothing works so far :/