2012-10-24 17 views
39

Sto utilizzando Weld come implementazione CDI. Il mio test di integrazione, che tenta di assemblare il contenitore Weld di istanziazione di oggetti grafici funziona bene, quando ho bean.xml vuoto in src/test/java/META-INF/beans.xml. Ecco che semplice test:CDI: beans.xml, dove ti metto?

public class WeldIntegrationTest { 
    @Test 
    public void testInjector() { 
     new Weld().initialize(); 
     // shouldn't throw exception 
    } 
} 

Ora quando corro mvn clean install, ho sempre arrivare: Missing beans.xml file in META-INF!

mie cartelle principali sono "src" e "web", che contiene la cartella WEB-INF, ma ho anche provato utilizzare la struttura predefinita di maven e rinominato "web" in "webapp" e spostato in src/main. Ho provato tutte le posizioni ragionevoli potrei pensato:

- 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 

niente funziona così lontano:/

+0

Nel mio progetto CDI il bean.xml è in src \ main \ webapp \ WEB-INF, e nel mio file di guerra è anche nella directory WEB-INF. – kaos

risposta

74

Per EJB e confezionamento JAR è necessario posizionare il beans.xml in src/main/resources/META-INF/.

Per gli imballaggi WAR è necessario inserire beans.xml in src/main/webapp/WEB-INF/.

Ricordare che solo i file .java devono essere inseriti nelle directory src/main/java e src/test/java. Le risorse come i file .xml devono essere in src/main/resources.

+0

Perfetto, nel mio caso funziona in src/main/resources/META-INF – Xorty

+0

Nel mio caso sto testando cdi-unit (usa Weld) Devo metterlo nel mio src – dalvarezmartinez1

+0

@ dalvarezmartinez1 Scommetto che potresti spostare i fagioli .xml in/src/main/resources nel tuo caso; dovrebbe finire nella cartella 'classi' dopo aver creato –

8

Giusto per integrare le risposta di cui sopra, qui è un riferimento ufficiale su questo: https://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

citazione:

Un'applicazione che utilizza CDI deve avere un file chiamato beans.xml. Il file può essere completamente vuoto (ha contenuto solo in alcune situazioni limitate), ma deve essere presente. Per un'applicazione Web, il file beans.xml deve trovarsi nella directory WEB-INF. Per i moduli EJB o i file JAR, il file beans.xml deve essere nella directory META-INF.

+4

In Java EE 7 'beans.xml' non è più obbligatorio. Vedi [Oracle Java EE Tutorial] (https://docs.oracle.com/javaee/7/tutorial/cdi-basic013.htm) –