私は次のように埋め込まれたGlassFishのを使用しました:Glassfishの組み込み+ MavenのCoberturaのプラグイン
public static void createContainer() throws IOException {
File target = new File("target/classes");
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, target);
properties.put("org.glassfish.ejb.embedded.glassfish.installation.root",
"/opt/glassfish3/glassfish");
container = EJBContainer.createEJBContainer(properties);
context = container.getContext();
}
@AfterSuite(alwaysRun = true)
public static void closeContainer() throws NamingException {
// close container
}
// I use this method to lookup
public static <T> T lookupBy(Class<T> type) {
try {
return (T) context.lookup("java:global/classes/" + type.getSimpleName());
} catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
問題は、組み込みのGlassFishは、「ターゲット/クラス」のクラスを使用することで、MavenのCoberturaのは、「ターゲット/生成を使用しています-classes/cobertura "と入力します。最初にテストを実行するとOKですが、2回目に、coberturaが実行されると、java.lang.RuntimeExceptionが発生します:javax.naming.NamingException(おそらく、coberturaが "target/generated-classes/cobertura" "glassfishは" target/classes "に取り組んでいます)。
この問題を解決するためのアイデアはありますか?