Ich verwende Weld als CDI-Implementierung. Mein Integrationstest, bei dem versucht wird, einen Objektgraph zu erstellen, der den Weld-Container instanziiert, funktioniert gut, wenn ich die beans.xml in src/test/Java/META-INF/beans.xml
leer habe. Hier ist dieser einfache Test:
public class WeldIntegrationTest {
@Test
public void testInjector() {
new Weld().initialize();
// shouldn't throw exception
}
}
Wenn ich jetzt mvn clean install
starte, bekomme ich immer: Missing beans.xml file in META-INF!
Meine Stammordner sind "src" und "web", die den Ordner WEB-INF enthalten. Ich habe jedoch auch versucht, die Standard-Maven-Struktur zu verwenden, "web" in "webapp" umbenannt und in src/main verschoben. Ich habe alle vernünftigen Orte ausprobiert, an die ich denken konnte:
- 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
Nichts funktioniert bisher: /
Für EJB- und JAR-Verpackungen sollten Sie den beans.xml
in src/main/resources/META-INF/
einfügen.
Für WAR-Verpackungen sollten Sie den beans.xml
in src/main/webapp/WEB-INF/
einfügen.
Beachten Sie, dass nur .Java
-Dateien in den Verzeichnissen src/main/Java
und src/test/Java
abgelegt werden sollten. Ressourcen wie .xml
-Dateien sollten in src/main/resources
sein.
Um die obige Antwort zu ergänzen, finden Sie hier eine offizielle Referenz: https://docs.Oracle.com/javaee/6/tutorial/doc/gjbnz.html
zitat:
Eine Anwendung, die CDI verwendet, muss über eine Datei namens beans.xml verfügen. Die Datei kann vollständig leer sein (sie hat nur in bestimmten begrenzten Situationen Inhalte), muss jedoch vorhanden sein. Für eine Webanwendung muss sich die Datei beans.xml im Verzeichnis WEB-INF befinden. Für EJB-Module oder JAR-Dateien muss sich die Datei beans.xml im Verzeichnis META-INF befinden.
http://www.javamonamour.org/2017/11/cdi-in-Java-se-8.html hier kann man sehen, wo ich es erfolgreich hingelegt habe, das ist unter src/META-INF. Der Beitrag enthält ein vollständiges Arbeitsbeispiel für CDI in Java SE.