Jetty 插件如何为 Maven 工作?

How Jetty plugin works for Maven?

我是 Maven 的新手,我正在使用名为 Entando 的产品开发的门户网站(但我的问题不是关于 Entando 但它是关于 Maven)。

因此,在文档中我找到了关于 Maven 的声明:

Maven takes care of all the dependencies and thanks to the Jetty plugin it can also execute the portal without a DBMS and servlet container, which do not figure in the basic prerequisites for this reason.

所以我知道 Maven 做了什么,阅读文档后,在我看来 Jetty 插件是一个 Maven 插件,它只扫描项目的更改并自动重新部署webapp 如果找到的话。这通过消除构建和部署步骤使开发周期更有效率。

好的...这看起来很清楚,但是它用于在没有 DBMS 和 servlet 容器的情况下执行门户是什么意思?

我假设您引用了 Entando 的文档。

关于 Jetty,它是一个完整的 Web 服务器,可以很容易地 运行 作为嵌入式服务器。您可以在他们的网站上找到有关码头的各种信息:http://www.eclipse.org/jetty/

特别有趣的是 Jetty 对此处描述的 Maven 标准目录布局的良好支持:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#configuring-your-webapp

在给您最终答案之前,让我们先快速了解一下在处理 Web 应用程序项目时使用 Jetty 有多容易。

您可以像这样从控制台从 Maven 原型生成 Web 应用程序(假设您使用 Windows 并且您已经设置 MAVEN_HOME-Variable 并将其添加到 PATH 变量,否则 运行 它来自安装 Maven 的地方):

mvn archetype:generate -DgroupId=ch.jba -DartifactId=SampleWebApp -DarchetypeArtifactId=maven-archetype-webapp

您可能需要点击 Enter 几次才能使用默认值(例如版本)。

之后您将在 运行 执行上述命令的目录中有一个文件夹 SampleWebApp。此文件夹内有项目的 pom.xml 以及 /src 文件夹。

(作为可选步骤,您可以将此项目导入到您的 IDE - 选择 Java 1.7,这是我快速验证的版本,它将在下一步中使用)。

现在,如果您浏览 src\main\webapp 下的文件,您将认出(我猜是这样...)标准 Web 应用程序目录结构,例如此处描述的示例:https://docs.oracle.com/javaee/6/tutorial/doc/bnadx.html

现在您可以通过 运行 命令 mvn clean install 构建这个项目 - 这将在 SampleWebApp\target 下生成非常想要的 SampleWebApp.war 存档.

如果您不想在本地设置像 Tomcat 这样的 Web 服务器并且仍然快速地 运行 示例应用程序,那么此时 Jetty 将发挥作用。只需在 pom.xml 中的 </build> 上方添加以下内容:

<plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.11.v20150529</version> </plugin> </plugins> </build>

这会将 Jetty-Plugin(与 Java 1.7 兼容)添加到您的 Maven 项目中,您可以从 pom.xml 的目录中 运行 mvn jetty:run居住。查看构建输出时,您会发现一些异常,例如 webAppSourceDirectory not set. Trying src\main\webapp,这正是我上面提到的 Jetty 对 Maven 标准目录布局 的非常好的支持。

之后您将看到示例项目部署在 Jetty 上并且可以在 http://localhost:8080 下访问(它将显示 Hellow World! 或您放入位于 index.jsp 中的任何其他内容 SampleWebApp\src\main\webapp`.

现在终于可以回答你的问题了:

看看你引用的这一部分:

它也可以在没有 DBMS 和 servlet 容器的情况下执行门户,因此不在基本先决条件中。

它告诉你 Entando(不管那是什么......我自己还没有听说过它)在你已经阅读的状态下故意这样做引用尚未配置一个 DBMS 或一个 servlet 容器,允许您以简单的方式 运行 它与 Jetty。

如果您继续学习 Entando 的教程/手册,它可能会告诉您如何配置 Jetty 以使用(嵌入式)DMBS(如 H2-In-Memory-DB)and/or如何配置 Jetty 作为 servlet 容器工作(因此它也支持 HTTPServlets)。

=> 如果您问我,Jetty 是一个理想的合作伙伴——要么在您的 pom.xml、call/start 和 类 中快速配置它(并配置它们)仅在纯 Java 内或将其安装在您的磁盘上并从命令行将其用作独立服务器(在其属性 XML 中进行配置)。

注意:人们常常忘记 Jetty 不是他们的最终部署环境,他们只是使用它来加快开发过程.. . 不要犯那个错误,不时将您的 WAR 部署到最终部署环境(如 Tomcat 或其他)。

希望对您有所帮助:)