Jetty 插件如何为 Maven 工作?

Posted

技术标签:

【中文标题】Jetty 插件如何为 Maven 工作?【英文标题】:How Jetty plugin works for Maven? 【发布时间】:2015-07-06 08:57:49 【问题描述】:

我是 Maven 的新手,我正在开发一个使用名为 Entando 的产品开发的门户(但我的问题不是关于 Entando,而是关于 Maven) .

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

Maven 负责处理所有依赖项,感谢 Jetty 插件它也可以在没有 DBMS 和 servlet 的情况下执行门户 容器,这不在此的基本先决条件中 原因。

所以我知道 Maven 做了什么,阅读文档后,在我看来 Jetty 插件是一个 Maven 插件,它简单地扫描项目的更改并在发现任何更改时自动重新部署 webapp .这消除了构建和部署步骤,从而提高了开发周期的效率。

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

【问题讨论】:

【参考方案1】:

我假设您引用了 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-Variable,否则从安装 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! 或您放入位于 SampleWebApp\src\main\webapp 下的 index.jsp 中的任何其他内容。

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

看看你的这部分报价:

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

它告诉你 Entando (不管那是什么......我自己还没有听说过)在你已经阅读该引用尚未配置 DBMS 或 servlet 的状态下故意这样做容器,让您可以轻松地使用 Jetty 运行它。

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

=> 如果你问我,Jetty 是一个可以与之合作的梦想 - 要么在你的 pom.xml 中快速配置它,要么只在纯 Java 中调用/启动类(并配置它们),要么将它安装在你的磁盘上并从命令行将其用作独立服务器(在其属性 XML 中进行配置)。

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

希望有所帮助:)

【讨论】:

以上是关于Jetty 插件如何为 Maven 工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何用jetty maven插件运行web项目

maven web项目如何用jetty运行

如何为 Maven 插件指定默认目标?

如何为 maven 插件定义默认 mojo

Myeclipse中maven工程使用jetty插件启动jetty服务器调试

Myeclipse中maven工程使用jetty插件启动jetty服务器调试