如何运行最基本的Vaadin应用程序

时间:2014-12-22 11:00:58

标签: maven-2 vaadin7 intellij-14

我一直试图创建一个开箱即用的Vaadin应用程序,但到目前为止还没有成功。

使用IntelliJ IDEA 14,添加了正确的Vaadin maven原型并创建了应用程序 我最终得到了三个项目文件夹(生产,ui和widgetset),根据教程,我预计src下只有几个文件。反正。

所以现在当我尝试在Tomcat下部署时,我得到臭名昭着的

  

请求的资源   [/VAADIN/widgetsets/com.vaadin.DefaultWidgetSet/com.vaadin.DefaultWidgetSet.nocache.js]   没有从文件系统或通过类加载器找到。

错误。关于如何更改web.xml文件来解决这个问题的文章很多。但是,我没有要更改的web.xml 文件。

我也不需要添加任何客户端js所以我真的不需要任何东西,我只需要服务器端Vaadin。

我是否可以摆脱整个WidgetSet依赖关系,从而摆脱这个错误,只运行最基本的服务器端Vaadin应用程序而没有所有奇特的东西?

我已经尝试评论了所有对客户端编译器 widgetset 的引用,以及我对Java的微不足道的所有其他事情让我在这个过程中失去了几天。< / p>

一些天才的见解会很棒。提前谢谢。

1 个答案:

答案 0 :(得分:3)

所以我让你对Vaadin的工作方式有一个大致的了解。这里有一些背景信息,只是为了清除一些内容,并可能将相关信息提供给其他感兴趣的人。

GWT的想法是你用Java做一个应用程序并通过GWT编译器运行它。你可以直接在浏览器中运行javascript。编译器本身就是GWT的大部分内容。就小部件或组件而言,现成功能的选项非常渺茫。它更多的是“自己动手”#39;他们让GWT用户或其他框架制造商填补小部件/图形空白的心态。

Vaadin使用GWT,但其方式与基于GWT的大多数框架略有不同。正如其他GWT扩展框架一样,Vaadin包含一组小部件,使您可以构建应用程序的大部分内容,而无需修改小部件。 Vaadin做的不同之处在于它预编译了小部件并在其上面并为您提供了一个通信管理器,允许您从服务器引导小部件。这里的关键区别在于,在几乎所有其他GWT框架中,您必须在每次更改UI后运行GWT编译器,在Vaadin中您不必这样做,因为服务器使用JSON消息来控制布局和小部件。在Vaadin中,您在更改窗口小部件的行为时进行编译,而不是在使用它时进行编译。

因为Vaadin并不要求你进行GWT编译&#39;该应用程序始终可以为您提供预编译的widgetset,以满足您的基本需求。这称为DefaultWidgetSet。只要您不进行客户端更改或使用根目录中的任何加载项就足够了。

然后到实际问题。你使用的原型一周前就出现了。我不知道你指的是哪个教程,但我的赌注是它仍然指的是旧的原型,应该更新。通常,您应该能够通过以下步骤运行应用程序:

  1. 使用原型
  2. 创建项目
  3. 在根文件夹
  4. 中运行mvn install
  5. 在ui文件夹中运行mvn jetty:run(或者通过IDE将ui部署到另一个servlet容器,如tomcat)
  6. 因为您收到了您发布的错误消息,它表示该应用程序实际上正在尝试使用预编译版本,这很好,但由于某种原因它无法找到它。它应该来自widgetset模块,来自vaadin-client编译的依赖项:

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

    $ {vaadin.version}可以全局定义(因为你应该有),或者你可以直接输入版本号,如7.3.7。 由于某种原因,它似乎没有找到这个。如果不存在,请将其添加到widgetset pom.xml中,并在widgetset中运行mvn install(或者父项,两者都可以)。然后转到ui并使用mvn jetty:run再次启动服务器。

    我不确定,但我的猜测是原型具有自定义widgetset,并且不依赖于预编译的widgetset。之后,您需要默认的widgetset而不是自定义的widgetset,并删除了UI类中的widgetset的注释,但是您还没有为默认的widgeset添加依赖项。

    由于您的用例非常简单,所讨论的原型可能有点矫枉过正。如果您不开发客户端,并且用于构建生产就绪部署包(生产模块)的模块在此时肯定不在范围内,您没有理由将项目拆分为ui和widgetset。所以在这个意义上,widget集,生产和父模块对你来说完全无关紧要。

    如果你想要一个更简单的项目结构,你可以克隆我在这里找到的git repo:https://github.com/Peppe-/hello-world。它有一个旧的Vaadin默认单模块原型作为基础,但我撕掉了开发纯服务器端所不需要的一切,没有大惊小怪。 pom.xml从大约200行声明下降到80,但这也意味着如果要使用其他功能,则必须添加内容。像编译器一样,或者如果你想添加css(修改主题)。您可以使用以下命令获取它并运行它:

    git clone https://github.com/Peppe-/hello-world.git
    cd hello-world
    mvn jetty:run
    

    或者在第一步之后,您可以将其导入IDEA并从那里运行它。另外,如果要使用自己的包名,请重命名包(通过重命名src中的文件夹)。

    抱歉,我有点被带走并且漫无目的。如果我错过了什么,请询问任何问题。