`
hao0610
  • 浏览: 127623 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

jetty7模块依赖关系

 
阅读更多

原创文章,转载请注明出处!



 1.介绍

Jetty7与以前版本相比,包的组织结构有较大的变化——从原有的jetty.jar, jetty-util.jar到现在的十五个Jar文件。一下子多出这么多包,可能会让人手忙脚乱了,好在内容并没有增加特别多。而且,这也不完全是坏事。归功于Maven,jetty7的组织结构显得特别清楚,有利于学习过程中理解jetty的组织架构。当然,前提是你理清这些jar文件之间的依赖关系!

1.1.Maven依赖关系

上文已经提到过,etty7是采用Maven构建的,那么在我们就可以通过使用Maven的相关插件来Show出包之间的依赖关系了——maven dependency:tree或许就是个不错的工具。例如,要找出jetty-servlet模块依赖了哪些其它的模块:

# mvn -f jetty-servlet/pom.xml dependency:tree
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Jetty :: Servlet Handling
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree]
[INFO] org.eclipse.jetty:jetty-servlet:jar:7.0.0.RC2-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.2:test
[INFO] \- org.eclipse.jetty:jetty-security:jar:7.0.0.RC2-SNAPSHOT:compile
[INFO]    \- org.eclipse.jetty:jetty-server:jar:7.0.0.RC2-SNAPSHOT:compile
[INFO]       +- javax.servlet:servlet-api:jar:2.5:compile
[INFO]       +- org.eclipse.jetty:jetty-continuation:jar:7.0.0.RC2-SNAPSHOT:compile
[INFO]       \- org.eclipse.jetty:jetty-http:jar:7.0.0.RC2-SNAPSHOT:compile
[INFO]          \- org.eclipse.jetty:jetty-io:jar:7.0.0.RC2-SNAPSHOT:compile
[INFO]             \- org.eclipse.jetty:jetty-util:jar:7.0.0.RC2-SNAPSHOT:compile                                   

1.2依赖类型

jetty7使用了三种Maven依赖类型,如下:

compile 这是一种"硬依赖"关系!如果你想重新编译Jetty或者要运行Jetty,那么就必需满足这个依赖关系。在上例中,jetty-servlet对jetty-security有这种硬依赖关系,对于jetty-server, jetty-http, jetty-io等,则是一种"间接性硬依赖"关系。
provided 该类型的依赖又可以细分为两种情况:
1.可选依赖:要求在编译模块时,满足这种依赖依赖关系,但在运行环境(run-time)中,不强制要求满足。比如,jetty-util依赖于slf4j-api,如果要编译jetty-util,则一定要将slf4j置于classpath中。但在使用jetty-util组件时,slf4j则为可选的。
2.环境性依赖:也是一种运行时依赖关系,但比较微妙。举例说明吧:test-jetty-webapp依赖于servlet-api,只有servlet-api存在时,才能够通过编译。但是打包test-jetty-webapp时,并不需要将servlet-api.jar置于WEB-INF/lib目录中。这是因为test-jetty-webapp将被部署于servlet容器中,而servlet容器又依赖于servlet-api,也就是说,在容器成功启动后,就表示servlet-api被成功引入。那么在启动webapp应用时,依赖于servlet-api的应用也会正常启动——test-jetty-webapp在"Servlet容器环境"下运行时,就不需要提供servlet-api了。这也就是所谓的环境依赖吧!
test 单元测试时依赖的包

2.树型依赖关系

上图是Jetty7编译时依赖关系结构图,最右边的一列是外部依赖,其余的则是内部依赖关系。图中的各个模块是以jar组织的,而不同的Jar包又可以划分为逻辑组。逻辑组可以便于理解Jetty模块之间的关系,如下:

2.1HTTP

HTTP组表示了Jetty的核心模块,由jetty-util, jetty-io, jetty-http三个jar包组成,同时为jetty-client和jetty-server使用。

2.2Server

同上面的HTTP组一起,再加上jetty-server, jetty-continuation和servlet-api,就可以组成一个运行HTTP服务器所需要的最小依赖集合。在这种情况下,servlet-api所扮演的角色就与我们平常所理解的有所不同。在这里,你可以把它当成Jetty提供的,用于供开发人员扩展的处理器API。在HTTP服务器模式下运行的Jetty不提供Servlet容器功能!

2.3Servlet和WEB应用

在Servler组(见2.2)的基础上,再增加jetty-security和jetty-servlet就可以组成一个Servlet容器。这时我们能够编写Servlet、Filter等扩展功能,但这还不足以满足Servlet规范。我们不能够像一般的Java WEB应用那样,通过web.xml来配置servlet、filter等,只能使用硬编码的方式来配置。加入jetty-xml和jetty-webapp后,就形成了一个我们所熟知的Servlet容器了。如果再加上jetty-deploy,那么部署采用WAR形式打包的应用就更加方便了!

2.4扩展(Plus)

在以上功能特性的基础上,添加jetty-jndi, jetty-plus, jetty-annotation模块,可以使Jetty具有更多"类J2EE"的功能。这些模块就统称为扩展模块(jetty Plus)了。

3.外部依赖

按上图所示依赖关系来看,如果不需要提供jsp, annotations, plus, jndi这些功能的话,那么编译jetty时,唯一需要的外部依赖包就是servlet-api——也就是说,运行一个没有jsp的标准WEB应用时,jetty唯一需要的外部包就是servlet-api.jar。

当然,Jetty还有一些可选运行时依赖包,如jetty-util包中提供的日志记录服务会在类路径中搜索slf4j,如果找到了,就会使用slf4j来记录日志,否则就使用stderr来记录日志。

4.start.jar

start.jar是一个通用的启动程序(我会在其它的文章中详细解说start.jar的应用),它并不仅限于jetty的使用,它也不是jetty组成部分。start.jar中包含jetty启动时的配置文件start.config,这个文件是不能够被修改的,但是在运行start.jar时,可以在命令行指定自己的config配置文件。

start.jar通过使用start.config中的配置选项来定义一些需要启动jar,jetty运行时使用的默认配置能够支持WEB应用,但不支持jsp特性。以下命令可以让Jetty在默认配置情况下运行:

java –jar start.jar etc/myjetty.xml

如果要在默认配置的基础上增加jsp,jmx等特性,则需要在命令行指定:

java –jar start.jar OPTIONS=Server,jsp,jmx

通常,在命令行的OPTIONS参数值中,以大写开头的值表示一组jetty模块,以小写开头的值则表示对特写模块的引用。如上文中的jsp就表示对jetty-jsp及其依赖模块的引用,jmx则表示对jetty-jmx的引用。

以下命令能够显示可用的启动参数选项:

java –jar start.jar –help

如果要查看OPTIONS参数中的可选值,则用:

java –jar start.jar –list-options

作为OPTIONS参数的扩展,还可以通过使用"lib"(指向一个包含jar文件目录),"path"来指定其它的类路径,如:

java –jar start.jar lib=/usr/share/java path=$HOME/src/myproject/classes

5.类路径执行环境

在使用start.jar启动jetty时,start.jar并不依赖于其它的jar文件去运行。用户可以通过编写一个简单的shell脚本或bat脚本即可。start.jar会根据用户提供的配置文件(在jetty7中,有两个配置文件start.ini,start.config.其中,start.ini是比较常用的,start.config比较复杂,而且被封装在start.jar包中)来组织jetty启动时所需要的类路径,解决Jetty模块之间的依赖等。通过使用–exec-print 选项,可以打印出启动jetty时具体执行的命令。如,执行以下命令:

cd /usr/local/jetty-7
java -jar start.jar OPTIONS=server path=/usr/share/java/junit4.jar --dry-run

会在命令行产生以下内容:

/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/jre/bin/java \
-cp /usr/share/java/junit4-4.3.1.jar:\
/usr/local/jetty-7/lib/servlet-api-2.5.jar:\
/usr/local/jetty-7/lib/jetty-http-7.0.0.RC2-SNAPSHOT.jar:\
/usr/local/jetty-7/lib/jetty-continuation-7.0.0.RC2-SNAPSHOT.jar:\
/usr/local/jetty-7/lib/jetty-server-7.0.0.RC2-SNAPSHOT.jar:\
/usr/local/jetty-7/lib/jetty-util-7.0.0.RC2-SNAPSHOT.jar:\
/usr/local/jetty-7/lib/jetty-io-7.0.0.RC2-SNAPSHOT.jar \
-Djetty.home=/usr/local/jetty-7 \
org.eclipse.jetty.xml.XmlConfiguration \
/usr/local/jetty-7/etc/jetty.xml

大家可以仔细看一下产生的结果,其实就是我们运行一般jar应用时的命令行参数,但是start.jar通过配置文件,将这些都处理好了。

6.聚合jar包

当把jetty作为工具包来开发应用时,太多的依赖包可能会让你觉得头痛,特别是当依赖包不全的时候,也是比较烦人的事儿。好在jetty的外部依赖非常少!更好的是,jetty的编译文件还提供了些可以的编译配置,允许用户根据自己的需求,将Jetty模块编译的一个jar文件中去。可用的编译选项有:

  • jetty-all
  • jetty-all-server
  • jetty-client
  • jetty-plus
  • jetty-server
  • jetty-servlet
  • jetty-webapp

参考文章: http://wiki.eclipse.org/Jetty/Reference/Dependencies

  • 大小: 166.6 KB
分享到:
评论
1 楼 crazywen2011 2013-03-22  
高亮色太闪眼了,lz

相关推荐

    jetty 适合jdk1.8用的服务器

    例如,Jetty 9.4.x主要是为Java 8设计的,而较早的Jetty版本可能更适合JDK 6或7。 在压缩包文件`jetty-distribution-9.4.22.v20191022`中,我们可以期待找到以下内容: 1. **Jetty服务器核心**:包含了运行Jetty...

    maven多模块项目

    Maven多模块项目是一种高效组织大型Java...在创建和维护这样的项目时,理解Maven的配置、模块依赖以及如何利用插件如Jetty是非常关键的。通过合理规划和精心管理,Maven多模块项目能帮助团队高效地构建复杂的应用程序。

    maven多模块项目+jetty热部署实例源码

    - 使用`<modules>`标签在父POM中列出所有子模块,Maven会自动处理它们之间的依赖关系。 ** Jetty热部署 ** Jetty是一款轻量级的Java Web服务器和Servlet容器,支持热部署,即在不重启服务器的情况下更新Web应用。...

    jetty 9.4.9

    - **模块化设计**:Jetty的模块化架构允许用户只加载需要的功能,减少不必要的依赖,进一步提高性能。 - **直接支持WebSocket**:Jetty 9.4.9 支持WebSocket协议,使得实时双向通信成为可能,这对于开发实时应用...

    jetty各个版本下载

    例如,如果你的项目依赖于Servlet 3.0或更早版本,那么Jetty 7可能是一个合适的选择。但是,对于新项目或需要最新特性的项目,推荐使用更现代的版本,如Jetty 9或10,这些版本提供了更多的性能优化和安全更新。 3. ...

    jetty-6.1.26.zip

    7. **部署和管理Web应用**:Jetty支持多种方式部署Web应用,包括WAR文件、目录结构、甚至直接从类路径加载。管理工具如jetty-admin和jetty-console可以帮助开发者监控和控制服务器状态。 8. **连接器和适配器**:...

    jetty整合springmvc例子

    - **添加依赖**:在`pom.xml`中添加Jetty服务器和SpringMVC的依赖。 - **配置web.xml**:定义DispatcherServlet,设置SpringMVC的前端控制器。 - **创建Spring配置**:定义Spring的配置文件,包括Bean的定义和...

    maven-jetty-plugin

    可以通过修改POM.xml文件中的插件配置来调整Jetty的行为,如设置端口、启用或禁用特定的Jetty模块等。 4. **与Maven生命周期集成**:Maven Jetty Plugin提供了多个目标(goals),例如`jetty:run`用于启动服务器,`...

    jetty6.1.6-1

    5. **模块化设计**:Jetty的模块化架构允许用户根据需求选择安装组件,降低了不必要的资源消耗。 6. **HTTP协议支持**:除了基本的HTTP服务,Jetty还支持HTTPS(通过SSL/TLS)、WebSocket等协议,为现代Web应用提供...

    jetty6.1.6-2

    7. **配置灵活性**:Jetty提供了多种方式来配置服务器,包括XML配置文件、程序化API以及基于注解的配置。 8. **模块化**:Jetty的lib目录可能包含多个模块的JAR,如jetty-util.jar、jetty-http.jar等,这种模块化...

    jetty.project-jetty-9.4.35.v20201120.rar

    5. **模块化设计**:Jetty的模块化结构允许开发者根据需求选择必要的组件,减少不必要的依赖,提高效率。 6. **WebSocket支持**:Jetty是最早支持WebSocket的服务器之一,提供了完善的WebSocket API,便于开发实时...

    jetty-6.1.26官方正式版本.zip

    - **lib**:存放Jetty以及其依赖的JAR文件,这些库支持服务器的核心功能和服务。 - **etc**:包含了Jetty的配置文件,如server.xml,这些文件定义了服务器的行为和设置。 - **start.jar**:这是启动Jetty服务器的...

    Jetty

    1. **轻量级**: Jetty不需要重量级的Java EE应用服务器,仅依赖于Java标准库,因此启动速度快,内存占用少。 2. **模块化**: Jetty的组件设计允许开发者根据需要选择启用或禁用特定功能,以达到最优的性能和资源...

    Jetty中文手册

    Jetty JARS和依赖(Dependencies) 启动参数(Start Options) Jetty and JEE6 Web Profile 配置参考 Jetty XML语法(Syntax)–Jetty IOC Configuration Jetty XML用法–Using and Combining Jetty Configurations ...

    jetty8.0.0包下载

    4. **模块化**:Jetty的组件是模块化的,开发者可以根据需求选择安装和配置必要的部分,避免了不必要的资源消耗。 5. **兼容性**:Jetty支持多种协议,包括HTTP、HTTPS、WebSocket等,并且与Servlet 3.0及以下版本...

    jetty-6.1.14.zip

    Jetty直接处理HTTP协议,不依赖于其他库,这使其在性能上有所提升。它支持HTTP/1.1,包括Keep-Alive连接和HTTP压缩等特性。 4. **嵌入式使用** 一个独特的优点是Jetty可以嵌入到其他Java应用程序中,无需额外的...

    Jetty内嵌服务器实例

    6. **JettTest**:这个可能是一个测试类或者模块,用于验证内嵌Jetty服务器的正确运行。理解如何通过这样的测试来确保服务器能够正确地处理请求并返回预期的响应。 7. **myJettyDemo**:这是一个可能的项目或演示...

    jetty-4.2.24

    4. **模块化**:Jetty的组件设计为可插拔,用户可以根据需要选择和配置必要的模块。 5. **WebSocket支持**:Jetty很早就开始支持WebSocket协议,提供了全面的API和实现。 6. **HTTP/2支持**:Jetty支持最新的...

    jetty 8.1.15.v20140411

    7. **可扩展性**:Jetty的插件系统允许开发者轻松添加自定义功能或扩展已有功能。 在Jetty-distribution-8.1.15.v20140411的压缩包中,通常包含以下内容: 1. **bin目录**:包含了启动和停止Jetty服务器的脚本,如...

    Jetty Demo

    与其它如Tomcat这样的Servlet容器相比,Jetty的模块化设计使得它更易于集成到项目中,且启动速度更快。 在“JettyDemo”这个压缩包中,通常会包含以下内容: 1. **源代码**:可能包含一个或多个Java类,其中至少有...

Global site tag (gtag.js) - Google Analytics