如何使用 Maven 设置一个工作的 Vaadin 项目并使用 Jetty 运行 它?
How do I setup a working Vaadin project with Maven and run it with Jetty?
我在 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 中四处查看:
- https://vaadin.com/book/-/page/getting-started.maven.html
- https://vaadin.com/wiki/-/wiki/Main/Creating+a+Maven+project
- http://www.maxpagels.com/tutorials/vaadin-tutorial/
- 404 Not Found Error in a simple Jetty/Maven Hello World webapp
但是我还不能设置一个可以在 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
现在您可以看到 jetty 启动了,但是当我在 http://localhost:8080/ 打开浏览器时,我收到 404 未找到:Problem accessing /. Reason: Not Found
。我尝试过以下网址之一:
- http://localhost:8080/
- http://localhost:8080
- http://localhost:8080/hello-world
- http://localhost:8080/hello-world/
- http://localhost:8080/hello-world-parent/
- http://localhost:8080/hello-world-parent
- http://localhost:8080/webapp
- http://localhost:8080/webapp/
没有人为我工作(我总是收到 404 not found)。
现在,为什么他们在文档中说如果您按照我上面完成的步骤操作:
瓦丁之书:
You can then open it in a web browser at
http://localhost:8080/project-name.
project-name 是给 maven 生成目标的 artifactId 参数,我的是 artifactId: hello-world
,但正如我所说,http://localhost:8080/hello-world 对我不起作用(404 未找到)。
我也在阅读 Vaadin 7 CookBook,这里他们说:
We are done and we can run our new web application. Go to the root of
the project where pom.xml file is located and run the following
command. mvn jetty:start The application will be running on
http://localhost:8080
什么??? http://localhost:8080
没有 "project-name" 后缀???我已经试过了,但我仍然找不到404,无论如何...
请问有人可以向我解释发生了什么,我该如何解决这个令人沮丧的问题,以便最终开始使用 Vaadin 进行开发?
感谢关注
我猜你 运行 遇到了一个问题,其中说明是针对旧原型版本的,其中原型在大约一个月前更新为新版本,但说明谈论的是旧版本.最大的区别在于原型被制作成一个多模块项目,而旧原型是一个单一模块项目。
许多人在使用多模块项目时遇到了问题,因此当前的原型可能会在不久的将来重命名为其他名称,并且在当前的命名空间中,同一个项目将缩减回单个模块项目以进行制作它更容易上手。然而,在那之前,您必须学习使用多模块项目。
如果你查看文件夹内部,你应该在 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 上的项目。
为了能够 运行 您必须做两件事的软件,build 整个软件和启动 -ui 模块。
当您在根文件夹中调用 mvn install
时,会发生 - Building。您也可以只在 -widgetset 文件夹中执行此操作,但重要的是 -widgetset 获取 built 并安装到本地 Maven 存储库中,以便 -ui 可以在需要时找到它。在 root 上调用
mvn install
将导致它以正确的顺序分别调用所有子模块。
- 通过转到 hello-world-ui 并在那里调用
mvn jetty:run
来启动 UI。 -ui 项目中的 pom.xml 定义了 jetty 依赖项。
关于URL中的项目名称后缀。由 servlet 容器(Jetty 是其中之一,Tomcat,Wildfly 等是其他容器)决定是否在特定 URL 下部署它。 Jetty 是一个简单的 servlet 容器,您可以在需要时为项目启动它,因此 http://localhost:8080/
很好。 Tomcat 和其他的比较大,在生产中有更多的 suitable,你可以在一个 Tomcat 实例中一次部署许多项目(战争),所以需要将它们分开将项目名称添加到url、hello-world-ui
我在 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 中四处查看:
- https://vaadin.com/book/-/page/getting-started.maven.html
- https://vaadin.com/wiki/-/wiki/Main/Creating+a+Maven+project
- http://www.maxpagels.com/tutorials/vaadin-tutorial/
- 404 Not Found Error in a simple Jetty/Maven Hello World webapp
但是我还不能设置一个可以在 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
现在您可以看到 jetty 启动了,但是当我在 http://localhost:8080/ 打开浏览器时,我收到 404 未找到:Problem accessing /. Reason: Not Found
。我尝试过以下网址之一:
- http://localhost:8080/
- http://localhost:8080
- http://localhost:8080/hello-world
- http://localhost:8080/hello-world/
- http://localhost:8080/hello-world-parent/
- http://localhost:8080/hello-world-parent
- http://localhost:8080/webapp
- http://localhost:8080/webapp/
没有人为我工作(我总是收到 404 not found)。
现在,为什么他们在文档中说如果您按照我上面完成的步骤操作:
瓦丁之书:
You can then open it in a web browser at http://localhost:8080/project-name.
project-name 是给 maven 生成目标的 artifactId 参数,我的是 artifactId: hello-world
,但正如我所说,http://localhost:8080/hello-world 对我不起作用(404 未找到)。
我也在阅读 Vaadin 7 CookBook,这里他们说:
We are done and we can run our new web application. Go to the root of the project where pom.xml file is located and run the following command. mvn jetty:start The application will be running on http://localhost:8080
什么??? http://localhost:8080
没有 "project-name" 后缀???我已经试过了,但我仍然找不到404,无论如何...
请问有人可以向我解释发生了什么,我该如何解决这个令人沮丧的问题,以便最终开始使用 Vaadin 进行开发?
感谢关注
我猜你 运行 遇到了一个问题,其中说明是针对旧原型版本的,其中原型在大约一个月前更新为新版本,但说明谈论的是旧版本.最大的区别在于原型被制作成一个多模块项目,而旧原型是一个单一模块项目。
许多人在使用多模块项目时遇到了问题,因此当前的原型可能会在不久的将来重命名为其他名称,并且在当前的命名空间中,同一个项目将缩减回单个模块项目以进行制作它更容易上手。然而,在那之前,您必须学习使用多模块项目。
如果你查看文件夹内部,你应该在 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 上的项目。
为了能够 运行 您必须做两件事的软件,build 整个软件和启动 -ui 模块。
-
当您在根文件夹中调用
- Building。您也可以只在 -widgetset 文件夹中执行此操作,但重要的是 -widgetset 获取 built 并安装到本地 Maven 存储库中,以便 -ui 可以在需要时找到它。在 root 上调用
mvn install
将导致它以正确的顺序分别调用所有子模块。 - 通过转到 hello-world-ui 并在那里调用
mvn jetty:run
来启动 UI。 -ui 项目中的 pom.xml 定义了 jetty 依赖项。
mvn install
时,会发生 关于URL中的项目名称后缀。由 servlet 容器(Jetty 是其中之一,Tomcat,Wildfly 等是其他容器)决定是否在特定 URL 下部署它。 Jetty 是一个简单的 servlet 容器,您可以在需要时为项目启动它,因此 http://localhost:8080/
很好。 Tomcat 和其他的比较大,在生产中有更多的 suitable,你可以在一个 Tomcat 实例中一次部署许多项目(战争),所以需要将它们分开将项目名称添加到url、hello-world-ui