WeldをCDI実装として使用しています。 src/test/Java/META-INF/beans.xml
に空のbeans.xmlがある場合、Weldコンテナをインスタンス化するオブジェクトグラフうまく動作するを組み立てようとする統合テスト。以下に簡単なテストを示します。
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
これまでのところ何も動作しません:/
EJBおよびJARパッケージの場合、beans.xml
をsrc/main/resources/META-INF/
に配置する必要があります。
WARパッケージの場合、beans.xml
をsrc/main/webapp/WEB-INF/
に配置する必要があります。
.Java
ファイルのみをsrc/main/Java
およびsrc/test/Java
ディレクトリに配置する必要があることに注意してください。 .xml
ファイルなどのリソースはsrc/main/resources
にある必要があります。
上記の答えを補足するために、これに関する公式リファレンスがあります: https://docs.Oracle.com/javaee/6/tutorial/doc/gjbnz.html
見積もり:
CDIを使用するアプリケーションには、beans.xmlという名前のファイルが必要です。ファイルは完全に空にすることができます(特定の限られた状況でのみコンテンツを持っています)が、存在する必要があります。 Webアプリケーションの場合、beans.xmlファイルはWEB-INFディレクトリになければなりません。 EJBモジュールまたはJARファイルの場合、beans.xmlファイルはMETA-INFディレクトリになければなりません。
http://www.javamonamour.org/2017/11/cdi-in-Java-se-8.html ここで、src/METAの下にある成功した場所を見ることができます-INF投稿には、Java SE。