60

CDI 実装として Weld を使用しています。空のbeans.xmlがある場合、Weldコンテナをインスタンス化するオブジェクトグラフをアセンブルしようとする私の統合テストはうまく機能src/test/java/META-INF/beans.xmlします。これがその簡単なテストです。

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

を実行するmvn clean installと、常に次のようになります。Missing beans.xml file in META-INF!

私のルート フォルダーは、WEB-INF フォルダーを含む "src" と "web" ですが、デフォルトの maven 構造を使用して、"web" を "webapp" に名前を変更し、src/main に移動しました。考えられるすべての合理的な場所を試しました:

 - 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

これまでのところ何も機能しません:/

4

3 に答える 3

110

EJB および JAR パッケージ化の場合はbeans.xmlsrc/main/resources/META-INF/.

WAR パッケージの場合、 を に配置する必要がありbeans.xmlますsrc/main/webapp/WEB-INF/

およびディレクトリ.javaにはファイルのみを配置する必要があることに注意してください。ファイルなどのリソースは.src/main/javasrc/test/java.xmlsrc/main/resources

于 2012-10-24T20:27:59.777 に答える
13

上記の回答を補足するために、これに関する公式リファレンスを次に示します: https://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html

見積もり:

CDI を使用するアプリケーションには、beans.xml という名前のファイルが必要です。ファイルは完全に空にすることができます (特定の限られた状況でのみコンテンツが含まれます) が、存在する必要があります。Web アプリケーションの場合、beans.xml ファイルは WEB-INF ディレクトリにある必要があります。EJB モジュールまたは JAR ファイルの場合、beans.xml ファイルは META-INF ディレクトリーにある必要があります。

于 2015-08-24T10:36:14.557 に答える
0

http://www.javamonamour.org/2017/11/cdi-in-java-se-8.html ここで、私が成功した場所、つまり src/META-INF の下にあることがわかります。この投稿には、Java SE での CDI の完全な動作例が含まれています。

于 2017-11-05T16:32:51.510 に答える