【问题标题】:Failed to load Widgetsets in maven project in eclipse无法在 Eclipse 的 maven 项目中加载小部件集
【发布时间】:2013-09-14 08:34:42
【问题描述】:

我在eclipse 中使用maven 创建了一个vaadin Web 应用程序。特别是,我使用了vaadin-archetype-touchkit 中的原型book of vaadin (20.3.4)。在没有对默认生成的代码进行任何更改的情况下,我使用 maven 运行它,目标为clean package。然后我编译了Widgetset。当我尝试在 Tomcat 7 上运行它时,我收到来自网页的奇怪消息:

Failed to load the WidgetSet:
<WidgetSet Path>.DefaultWidgetSet.nocache.js 

在控制台上,我还看到了错误消息:

INFO: Requested resource [/VAADIN/themes/reindeer/styles.css] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.

INFO: Requested resource [/VAADIN/widgetsets/com.vaadin.DefaultWidgetSet/com.vaadin.DefaultWidgetSet.nocache.js] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.

INFO: Requested resource [/VAADIN/themes/reindeer/styles.css] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.

令我震惊的是,maven 没有创建 web.xml 文件,尽管我在教程中读到 vaadin 7 不再需要它。我已阅读similar question,其中建议对web.xml 文件进行调整。我应该推断我还必须手动创建一个web.xml 文件吗?

我也觉得奇怪,当我对典型的 vaadin 7 应用程序的原型尝试相同的过程时,它运行正常。由于我必须开发一个 touchkit 应用程序,我将不胜感激任何建议想法,但我最初的尝试可能会缺少什么。

【问题讨论】:

    标签: eclipse maven gwt web-applications vaadin


    【解决方案1】:

    如果您使用 servlet 3.0 配置(如 4.8.3. WEB Servlet Class 所述注释您的 servlet),则不再需要 web.xml仅

    通常你会这样配置你的 Vaadin 3.0 Servlet Config:

    public class MyUI extends UI {
    
          @WebServlet(value = "/*", asyncSupported = true)
          @VaadinServletConfiguration(productionMode = false, ui = MyUI.class)
          public static class Servlet extends VaadinServlet {
          }
    
          @Override
          protected void init(VaadinRequest request) {
                //your init stuff here
          }
    }
    

    在哪里使用 @VaadinServletConfiguration 作为设置 vaadin 相关参数的快捷方式。

    现在,如果您的项目中没有 vaadin 插件(因此您使用的是默认小部件集),就是这样,不需要更多工作。

    相反,如果您使用的是自定义插件,则必须在 @VaadinServletConfiguration 中指定要使用的小部件集,只需通过这种方式添加小部件集参数即可

    public class MyUI extends UI {
    
          @WebServlet(value = "/*", asyncSupported = true)
          @VaadinServletConfiguration(widgetset="com.bla.bla.MyWidgetSet",productionMode = false, ui = MyUI.class)
          public static class Servlet extends VaadinServlet {
          }
    
          @Override
          protected void init(VaadinRequest request) {
                //your init stuff here
          }
    }
    

    否则你必须像往常一样手动创建 web.xml...

    对于 maven,我认为您只需运行 mvn clean package 并且在打包阶段 maven-vaadin-plugin 会自动编译您的小部件集。

    【讨论】:

    • 感谢您的帮助。注释是在 Maven 项目中自动生成的。我试图按照您的描述进行更改,即在没有 maven 的情况下创建 vaadin 项目但无法找到注释 @VaadinServletConfiguration 的情况。 pom.xml中应该导入哪个jar?我尝试了 javax.servlet.api 3.0.1,但它不起作用。
    • 好的,我已经用 7.1.3 更新了 maven 创建的 7.0.4(默认)的 vaadin 版本,现在它找到了注释并且可以工作了!正如您在回答中所建议的那样,无论如何都必须在 @ VaadinServletConfiguration 中定义小部件集。在@WidgetSet 中它仍然不起作用。
    【解决方案2】:

    对我来说,将以下内容添加到 pom.xml 有帮助:

        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client-compiled</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
    

    【讨论】:

    • 这是我需要的提示。我对具有 vaadin-client-compiled 依赖项的项目有依赖项。但是这种依赖被标记为可选。我可以在主项目中添加依赖项,但删除可选元素也对我有用。
    【解决方案3】:

    这是项目根目录中的自述文件

    要编译整个项目,请运行“mvn install”。 要运行应用程序,请运行“mvn jetty:run”并打开http://localhost:8080/。

    要开发主题,只需更新相关主题文件并重新加载应用程序。 预编译主题消除了运行时的自动主题更新 - 请参阅下文了解更多信息。

    调试客户端代码 - 在应用程序运行时在单独的控制台上运行“mvn vaadin:run-codeserver” - 在应用程序的调试窗口中激活超级开发模式

    要生成可部署的生产模式 WAR: - 在 servlet 类配置中将 productionMode 更改为 true(嵌套在 UI 类中) - 运行“mvn clean vaadin:compile-theme package” - 请参阅下面的详细信息。运行“mvn clean”会删除预编译的主题。 - 使用“mvn jetty:run-war

    进行测试

    按照说明进行操作,您将获得正确的页面:)

    【讨论】:

    • 这个答案只是来自 Vaadin 原型项目 README.md 的 C&P。
    猜你喜欢
    • 2022-07-09
    • 2017-07-17
    • 2014-03-01
    • 2016-05-25
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多