【问题标题】:How do I setup a working Vaadin project with Maven and run it with Jetty?如何使用 Maven 设置工作的 Vaadin 项目并使用 Jetty 运行它?
【发布时间】:2015-03-25 20:42:59
【问题描述】:

我在 os x 机器上安装了 maven:

$ mvn --version 
Apache Maven 3.2.3 
Java version: 1.8.0_25, 
vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "mac os x", version: "10.10.1", arch: "x86_64", family: "mac"

我已经尝试了几个教程,在 SO 中环顾四周:

但我无法设置可在 jetty maven 插件上运行的工作 Vaadin 项目。我的问题是在jetty web服务器上找不到项目,总是报404 Not Found错误。

这是我做的步骤:

$ cd ~
$ mkdir Maven
$ cd Maven
$ mvn archetype:generate \
   -DarchetypeGroupId=com.vaadin \
   -DarchetypeArtifactId=vaadin-archetype-application \
   -DarchetypeVersion=7.3.9 \
   -Dpackaging=war
... 
[INFO] Archetype repository missing. Using the one from [com.vaadin:vaadin-archetype-application:7.3.9] found in catalog remote
    Define value for property 'groupId': : com.example
    Define value for property 'artifactId': : hello-world
    Define value for property 'version':  1.0-SNAPSHOT: : 1.0
    Define value for property 'package':  com.example: : 
    [INFO] Using property: themeName = mytheme
    [INFO] Using property: uiName = MyUI
    [INFO] Using property: widgetsetName = MyAppWidgetset
    Confirm properties configuration:
    groupId: com.example
    artifactId: hello-world
    version: 1.0
    package: com.example
    themeName: mytheme
    uiName: MyUI
    widgetsetName: MyAppWidgetset
     Y: : Y
     ...
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 56.332 s
    [INFO] Finished at: 2015-01-27T12:03:42+03:00
    [INFO] Final Memory: 15M/245M
    [INFO] ------------------------------------------------------------------------
$ cd hello-world
$ mvn package
    ...
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:00 min
[INFO] Finished at: 2015-01-27T12:08:56+03:00
[INFO] Final Memory: 21M/247M
[INFO] ------------------------------------------------------------------------
$

然后我输入 mvn jetty:run 命令:

$ mvn jetty:run

这给出了这个错误:

Maven:在当前项目中找不到前缀“jetty”的插件

所以我在 ~/.m2 目录中添加了一个 settings.xml 文件:

~/.m2/settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
    </pluginGroups>
</settings>

然后再次输入 mvn jetty:run:

$ mvn jetty:run
...
[INFO] Configuring Jetty for project: hello-world-parent
[INFO] webAppSourceDirectory not set. Defaulting to /Users/me/Maven/hello-world/src/main/webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes directory /Users/me/Maven/hello-world/target/classes does not exist
[INFO] Context path = /
[INFO] Tmp directory = /Users/me/Maven/hello-world/target/tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = null
[INFO] Webapp directory = /Users/me/Maven/hello-world/src/main/webapp
2015-01-27 12:11:28.610:INFO:oejs.Server:jetty-8.1.16.v20140903
2015-01-27 12:11:29.121:INFO:oejpw.PlusConfiguration:No Transaction manager found - if your webapp requires one, please configure one.
2015-01-27 12:11:31.038:WARN:oejsh.RequestLogHandler:!RequestLog
2015-01-27 12:11:31.155:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server

现在你可以看到码头启动了,但是当我在 http://localhost:8080/ 打开浏览器时,我得到一个 404 未找到:Problem accessing /. Reason: Not Found。我尝试过以下网址之一:

没有人为我工作(我总是得到 404 not found)。

现在,为什么他们在文档中说如果您按照我上面所做的步骤操作:

瓦丁之书:

然后您可以在网络浏览器中打开它 http://localhost:8080/project-name.

project-name 是赋予 maven generate 目标的 artifactId 参数,我的是 artifactId: hello-world,但正如我所说的 http://localhost:8080/hello-world 对我不起作用(404 未找到)。

我也在阅读 Vaadin 7 CookBook,他们说:

我们完成了,我们可以运行我们的新 Web 应用程序了。去到根 pom.xml文件所在的项目,运行以下 命令。 mvn jetty:start 应用程序将在 http://localhost:8080

什么??? http://localhost:8080 没有“项目名称”后缀???我已经尝试过了,但我仍然找不到 404,无论如何...

请问,有没有人可以向我解释发生了什么,我该如何解决这个令人沮丧的问题,以便最终开始使用 Vaadin 进行开发?

感谢您的关注。

【问题讨论】:

    标签: maven jetty vaadin


    【解决方案1】:

    我猜你遇到了一个问题,说明是针对旧原型版本的,其中原型在一个月左右前更新到新版本,但说明谈论的是旧版本。最大的不同是原型被制作成一个多模块项目,而旧的原型是一个单模块项目。

    许多人在使用多模块项目时遇到了问题,因此当前的原型可能会在不久的将来重命名为其他东西,并且在当前的命名空间中,相同的项目将被缩减回单个模块项目以使其更容易开始使用。然而,在那之前,您必须学会使用多模块项目。

    如果您查看文件夹内部,您应该在 hello-world 文件夹中有一组文件夹。每个文件夹都有一个模块:

    • hello-world-ui - 实际 UI 项目所在的代码
    • hello-world-widgetset - 将使用 GWT 从 Java 编译为 JavaScript 的代码。 -ui 依赖于这个项目
    • hello-world-production - -ui 的缩小版本,适用于将应用程序部署到生产服务器时。这纯粹是对性能提升的小幅优化。
    • 和根文件夹,它本身就是一个模块,hello-world-parent。

    首先你应该删除你添加到 settings.xml 的东西。 Jetty 应该在应该使用它的项目的 pom.xml 中定义。现在您在全局范围内定义了它,以便它适用于所有项目,也适用于那些不能在 Jetty 上运行的项目。

    为了能够运行该软件,您必须做两件事,构建整个软件并启动 -ui 模块。

    1. 当您在根文件夹中调用 mvn install 时,会发生构建。您也可以只在 -widgetset 文件夹中执行此操作,但重要的是 -widgetset 已构建并安装到您的本地 maven 存储库中,以便 -ui 可以在需要时找到它。在 root 上调用 mvn install 将导致它以正确的顺序分别被所有子模块调用。
    2. 通过转到 hello-world-ui 并在那里调用 mvn jetty:run 来启动 UI。 -ui 项目中的 pom.xml 已经定义了一个 jetty 依赖。

    关于URL中的项目名称后缀。由 servlet 容器(Jetty 是其中之一,Tomcat、Wildfly 等是其他容器)决定是否将其部署在特定的 URL 下。 Jetty 是一个简单的 servlet 容器,您可以在需要时为项目启动它,因此 http://localhost:8080/ 很好。 Tomcat等比较大,比较适合生产,一个Tomcat实例可以同时部署多个项目(wars),所以需要在url中加上项目名hello-world-ui

    【讨论】:

    • 天啊!!!谢谢!谢谢!谢谢!你是我的救命恩人!两天的挫败感试图了解发生了什么!只有一个问题,如果我从'-parent'模块运行mvn package而不是mvn install阶段,它会一样吗?因为package 阶段不也包含install 阶段吗?
    • 其实没有,默认的生命周期是这样的:验证、编译、测试、打包、集成测试、验证、安装、部署。使用这些命令中的任何一个,它都会运行一切,直到那为止。因此,例如运行包运行验证,然后编译,然后测试,然后打包。在maven.apache.org/guides/introduction/… 上查看更多信息。 Package 创建一个 .war/.jar 文件并将其放在项目的 /target 文件夹中。 Install 获取该 .war 文件并将其复制到您的 .m2 存储库中,其他项目可以在其中找到它。
    • 另外,如果你想要一个简单的单模块 Vaadin 项目,你可以在 github 中克隆我的 hello-world 项目:github.com/Peppe-/hello-world。请参阅 README 中的用法部分进行设置。将三行复制粘贴到您的控制台中,软件应该正在运行。请注意,我从 pom 中删除了并非严格需要的所有内容,因此如果您需要更多功能,例如小部件集编译,则必须将它们添加回来。我喜欢简约和简单的解决方案。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 2016-02-29
    • 2022-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2016-05-30
    相关资源
    最近更新 更多