3

我一直在尝试创建一个开箱即用的 Vaadin 应用程序,但迄今为止没有成功。

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

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

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

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

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

我可以摆脱整个 WidgetSet 依赖,从而也摆脱这个错误,只运行最基本的服务器端 Vaadin 应用程序,而不需要所有花哨的东西吗?

我已经尝试注释掉所有对客户端编译器小部件集和其他一切的引用,我对 Java 的微不足道的知识让我在这个过程中失去了很多天。

一些天才的洞察力会很棒。提前致谢。

4

1 回答 1

3

所以我让你大致了解 Vaadin 的工作原理。这里有一些背景信息,只是为了澄清一些事情,并可能将相关信息也提供给其他感兴趣的人。

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

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

因为 Vaadin 并不要求您一直“GWT 编译”应用程序,它可以为您提供预编译的小部件集以满足您的基本需求。这称为 DefaultWidgetSet。只要您不进行客户端更改或使用根目录中的任何附加组件,这就足够了。

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

  1. 使用原型创建项目
  2. mvn install在根文件夹中运行
  3. 在 ui 文件夹中运行mvn jetty:run(或者通过 IDE 将 ui 部署到另一个 servlet 容器中,例如 tomcat)

因为您收到您发布的错误消息,这表明该应用程序实际上正在尝试使用预编译版本,这很好,但由于某种原因它找不到它。它应该来自 widgetset 模块,来自其中的 vaadin-client-compiled 依赖项:

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

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

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

由于您的用例非常简单,因此所讨论的原型可能有点矫枉过正。如果您不开发客户端,那么您没有理由将项目拆分为 ui 和 widgetset,并且此时用于构建生产就绪部署包(生产模块)的模块肯定超出了范围。因此,从这个意义上说,小部件集、生产和父模块与您完全无关。

如果你想要一个更简单的项目结构,你可以克隆我在这里找到的 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 中的文件夹)。

对不起,我有点得意忘形了,继续胡说八道。如果我错过了什么,请提出任何问题。

于 2014-12-22T18:17:30.910 回答