1

私は vaadin と OSGi を使用してモジュラー アプリケーションを作成しています。長い戦いの末、無事にアプリケーションをデプロイすることができました。ただし、スタイルを読み込めません。アクセスしようとすると http://localhost:8080/myapp/VAADIN/themes/myTheme/styles.css 、次の例外が発生しました。

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: com/vaadin/sass/internal/ScssStylesheet
com.vaadin.server.VaadinServlet.serveOnTheFlyCompiledScss(VaadinServlet.java:957)
com.vaadin.server.VaadinServlet.serveStaticResourcesInVAADIN(VaadinServlet.java:790)
com.vaadin.server.VaadinServlet.serveStaticResources(VaadinServlet.java:760)
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:257)
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:201)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.ClassNotFoundException: com.vaadin.sass.internal.ScssStylesheet
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
java.lang.ClassLoader.loadClass(ClassLoader.java:356)
com.vaadin.server.VaadinServlet.serveOnTheFlyCompiledScss(VaadinServlet.java:957)
com.vaadin.server.VaadinServlet.serveStaticResourcesInVAADIN(VaadinServlet.java:790)
com.vaadin.server.VaadinServlet.serveStaticResources(VaadinServlet.java:760)
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:257)
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:201)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)[/code]

com.vaadin.sass.internal.ScssStylesheetクラスは vaadin-theme-compiler-7.xxjar によって提供されますが、サーバーはこのパッケージをインポートしません。DynamicImport-Package: *次に、 vaadin サーバーの MANIFESTを追加して、vaadin サーバー バンドルを「ハッキング」しました。前の例外は表示されませんが、org.w3c.css.sac.CSSException.

アプリケーションの .war ファイルを tomcat にデプロイすると、エラーが発生せず、アプリが期待どおりに表示されることに注意してください (すべてのライブラリが WEB-INF/lib の下に追加され、Tomcat がそれらをクラス ローダーに追加するため)。したがって、問題は純粋な OSGi です。

4

2 に答える 2

2

Vaadin 7.1.3 バンドルに基づいて、次の変更を行う必要があります。

  • com.vaadin.server に com.vaadin.theme-compiler をインポートします。
  • com.vaadin.shared.deps および com.vaadin.theme-compiler に org.w3c.css.sac をインポートする
  • ScssStylesheet.setStylesheetResolvers を介して ScssStylesheetResolver を提供します。これは、デフォルトの実装として (のみ) ファイルシステム / クラスローダーではなく、バンドル リソースからロードされます。
  • 元のテーマの一部をテーマにインポートする場合は、com.vaadin.themes へのフラグメントとして作成することを検討してください。これは、ScssStylesheetResolver のベースとして使用できます。
于 2013-08-22T19:59:39.013 に答える
1

これは、作成者に報告する必要がある Vaadin のパッケージング バグのようです。コア Vaadin バンドルがパッケージからクラスにアクセスする必要がある場合は、ヘッダーcom.vaadin.sass.internalにそれを含める必要があります。Import-Package

に関してはorg.w3c.css.sac、どのバンドルがエラーをスローするかを指定していませんが、同じ種類の問題のように聞こえます。そのパッケージを使用するバンドルは、Import-Package を介してインポートする必要があります。

于 2013-05-13T16:38:23.330 に答える