J'utilise Weld comme implémentation CDI. Mon test d'intégration, qui essaie d'assembler le graphe d'objet instanciant le conteneur Weld fonctionne bien , lorsque j'ai beans.xml vide dans src/test/Java/META-INF/beans.xml
. Voici ce test simple:
public class WeldIntegrationTest {
@Test
public void testInjector() {
new Weld().initialize();
// shouldn't throw exception
}
}
Maintenant, quand je lance mvn clean install
, je reçois toujours: Missing beans.xml file in META-INF!
Mes dossiers racine sont "src" et "web" qui contient le dossier WEB-INF, mais j'ai également essayé d'utiliser la structure maven par défaut et renommé "web" en "webapp" et l'a déplacé vers src/main. J'ai essayé tous les endroits raisonnables auxquels je pouvais penser:
- 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
Rien ne fonctionne jusqu'à présent: /
Pour les emballages EJB et JAR, vous devez placer le beans.xml
dans src/main/resources/META-INF/
.
Pour l’emballage WAR, vous devez placer le beans.xml
dans src/main/webapp/WEB-INF/
.
Rappelez-vous que seuls les fichiers .Java
doivent être placés dans les répertoires src/main/Java
et src/test/Java
. Les ressources telles que les fichiers .xml
doivent être dans src/main/resources
.
Pour compléter la réponse ci-dessus, voici une référence officielle à ce sujet: https://docs.Oracle.com/javaee/6/tutorial/doc/gjbnz.html
citation:
Une application qui utilise CDI doit avoir un fichier nommé beans.xml. Le fichier peut être complètement vide (il ne contient du contenu que dans certaines situations limitées), mais il doit être présent. Pour une application Web, le fichier beans.xml doit se trouver dans le répertoire WEB-INF. Pour les modules EJB ou les fichiers JAR, le fichier beans.xml doit se trouver dans le répertoire META-INF.
http://www.javamonamour.org/2017/11/cdi-in-Java-se-8.html vous pouvez voir où je l'ai mis avec succès, sous src/META-INF. Cet article contient un exemple complet de CDI dans Java SE.