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 容器(因此它也支持HTTPServlet
s)。
=> 如果你问我,Jetty 是一个可以与之合作的梦想 - 要么在你的 pom.xml
中快速配置它,要么只在纯 Java 中调用/启动类(并配置它们),要么将它安装在你的磁盘上并从命令行将其用作独立服务器(在其属性 XML 中进行配置)。
注意:人们经常忘记 Jetty 不是他们的最终部署环境,他们只是使用它来加快开发过程......不要犯这个错误并部署你的WAR
不时到最终的部署环境(如 Tomcat 或其他)。
希望有所帮助:)
【讨论】:
以上是关于Jetty 插件如何为 Maven 工作?的主要内容,如果未能解决你的问题,请参考以下文章