0

gradle、arquillian、および bnd ツールを使用して、liferay 7 ポートレットの統合テストを作成しようとしています。
これは、テスト クラスでの私の展開方法です。

@Deployment
public static JavaArchive create() throws IllegalArgumentException, FileNotFoundException {
    print("Eseguo il Deployment");

    BndProjectBuilder bndProjectBuilder = ShrinkWrap.create(BndProjectBuilder.class);

    bndProjectBuilder.setBndFile(new File("bnd-test.bnd"));
    bndProjectBuilder.generateManifest(true);
    JavaArchive j = bndProjectBuilder.as(JavaArchive.class);        
    return j;
}

これが bnd-test.bnd ファイルです。

Bundle-Name: Beep Col Portlet Test
Bundle-SymbolicName: it.polimi.metid.beep.beepcol.test
Bundle-Version: 1.0.0
Include-Resource:build/classes/main,META-INF/resources=src/main/resources/META-INF/resources
Require-Capability:\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/ddm))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/frontend))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://java.sun.com/portlet_2_0))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/aui))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/portlet))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/theme))",\
osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/ui))",\
osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"

-jsp: *.jsp,*.jspf
-plugin.bundle: com.liferay.ant.bnd.resource.bundle.ResourceBundleLoaderAnalyzerPlugin
-plugin.jsp: com.liferay.ant.bnd.jsp.JspAnalyzerPlugin
-plugin.sass: com.liferay.ant.bnd.sass.SassAnalyzerPlugin
-sass: *
-sources: true
-dsannotations: *


機能テストではこれは正常に機能しますが、いくつかの統合テストを実行してcom.liferay.portal:com.liferay.portal.test;version='1.0.0' のような外部ライブラリを使用しようとすると問題が発生し

ますこのライブラリのいくつかのクラスを次のように使用します。

@Test
public void prova() throws Exception {
    Group g = GroupTestUtil.addGroup();     
}

私はこの例外を受け取ります:

java.lang.NoClassDefFoundError: com/liferay/portal/kernel/test/util/GroupTestUtil

これは、BndProjectBuilder に依存関係の jar が含まれていないか、bnd ファイルの構成が間違っているためだと思います。
誰かがすでにこの問題に遭遇しましたか?

4

1 に答える 1

0

Arquillian やその Liferay 統合についてはまったく理解していないため、この回答は一部実験と憶測に基づいています。

GroupTestUtilbundle を介して Liferay ランタイムですでに利用できるはずcom.liferay.portal.testです。クラスが存在し、エクスポートされていることを確認するのは簡単です。

OSGi フレームワークは、マニフェストの Import-Package 命令の内容に基づいて、解決時にバンドルのクラスパスを構築します。パッケージがそのリストで参照されていないクラスは、バンドルで使用できません。マニフェスト生成を使用する場合、通常は問題になりません。

テスト クラスは、テスト対象のモジュールとは異なるビルド ディレクトリにコンパイルされている可能性があります。Arquillian はデプロイされたバンドルと同じクラスパスでテストを実行しますが (私のテストによると)、テスト クラスは bnd によって Import-Package 命令を生成するために使用されず、バンドルの一部ではありませんが、そうではありません。バンドルで参照されていないパッケージを使用できます。

修正は簡単です。GroupTestUtilのパッケージを bnd-test.bnd に明示的にインポートします。

Import-Package: \
    com.liferay.portal.kernel.test.util,\
    *

( *2 行目の は、bnd に他のインポートを独自に生成し続けるように指示します。)

于 2016-08-22T20:43:44.710 に答える