webentwicklung-frage-antwort-db.com.de

CDI: beans.xml, wo stelle ich dich hin?

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: /

50
Xorty

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.

89
maba

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.

10
99Sono

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.

0