工作小几个月了,JDK基础和web应用框架学的的差不多了,开始学习Jetty源码,费了小半天才编译成功,把自己拆过的坑记录下来。

编译前的环境:

MAVEN 3.3、Eclips eLuna Service Release 1 (4.4.1)

下载好MAVEN后,得把Eclipse中的maven配置为下载的MAVEN具体请搜索其他博文参考!

  1. 下载源码
  2. 导入eclipse
  3. 编译源码

1.下载源码

1.1 Jetty源码可以方便的在Github的Jetty工程主页上下载,链接

1.2 进入主页后,看了的页面类似如下:

1.3 点击Jetty工程主页图片的1处可以出现下拉弹出菜单,你可以按branch或者tag选择不同版本的Jetty,本文使用的是Jetty 9.3.x,也就是快照版。

1.4 点击Jetty工程主页图片的2处,显示下载源码包的方式,如果你没有git客户端或者不想安装,点击下载zip包的连接进行直接下载。

2. 导入eclipse

2.1 下载zip包成功后,进行解压,jetty包的根目录下文件一览如下。在此,为后面叙述方便,称该目录为$myJettySourceRoot。

该目录(后续称为$myJettySourceRoot)中红框圈中的两个文件值得注意:

README.md是开发者团队为编译源码的开发者提供的一些提示的内容,但是别当真!完全按他的做是编译不会成功的!!!

porm.xml是Jetty工程的根porm文件。

2.2 打开Eclipse,选择File->import->Maven->Exesting Maven Projects。选择$myJettySourceRoot目录,我的是C:\Users\Administrator\Downloads\jetty.project-jetty-9.3.x,如下图,选择所有工程。点击“完成”开始导入,然后Maven会开始

下载依赖包,工程可能需要持续3个小时。中途出现的选项一律点“确认”和“resolve later”,可能会出现重启Eclipse的选项,也点“确认”。

3. 编译源码

3.1导入成功后,Eclipse中目录树如下,找到Jetty-Protject工程鼠标右键,选择run as->Maven clean,进行工程清理。

3.2 清理完成后,在选择etty-Protject工程鼠标右键,选择run as->run configuration。在Maven Bulid下新建一个build配置。按下图配置:进行install、但跳过test。(因为有一些测试在本机上难以成功)。点击“run”开始编译,中途会出现失败的场景,处理步骤参考3.3,重复几遍后可编译成功

3.3 编译失败的的处理参考。

在编译中,经常会出现编译失败,查看控制台信息会发现"Could not resolve dependencies for xxx:jar:test"的类似信息,出现这种情况是jetty-project某个子模块依赖了另一个子模块的test包,出现这种情况,先在Eclipse中找到对应xxx的Maven工程,右键run as ->maven install。比如xxx是jetty-plus,就右键jetty-plus工程,run as ->maven install,先安装这个子模块的所有包,然后再执行3.2,重复几次就可以编译成功。完全编译成功如下图:

3.4 在$myJettySourceRoot\jetty-distribution\target\distribution目录(我的目录是C:\Users\Administrator\Downloads\jetty.project-jetty-9.3.x\jetty-distribution\target\distribution)下可以查到编译成功后的文件。

3.5 打开cmd,cd到该目录下,输入java -jar start.jar可以启动Jetty。

Jetty源码学习-编译Jetty源码二三事的更多相关文章

  1. 从源码(编译)安装golang 二

    h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...

  2. elasticsearch5.5.3 源码学习 idea下源码编译

    1.学习elasticsearch 源码,通过搜索“elasticsearch源码”,进行相关搜索.   2.因源码gradle编译,选择gradle-3.5可以编译通过,对应elasticsearc ...

  3. Golang源码学习:调度逻辑(二)main goroutine的创建

    接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn ...

  4. 【 js 基础 】【 源码学习 】backbone 源码阅读(一)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  5. 【 js 基础 】【 源码学习 】backbone 源码阅读(二)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(source-code-study)进行参考交流,有详细的源码注释,以及知识总结,同时 ...

  6. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)浅谈 REST 和 CRUD

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  7. go 源码学习之---Tail 源码分析

    已经有两个月没有写博客了,也有好几个月没有看go相关的内容了,由于工作原因最近在做java以及大数据相关的内容,导致最近工作较忙,博客停止了更新,正好想捡起之前go的东西,所以找了一个源码学习 这个也 ...

  8. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  9. 框架源码系列七:Spring源码学习之BeanDefinition源码学习(BeanDefinition、Annotation 方式配置的BeanDefinition的解析)

    一.BeanDefinition 1. bean定义都定义了什么? 2.BeanDefinition的继承体系  父类: AttributeAccessor: 可以在xml的bean定义里面加上DTD ...

随机推荐

  1. Hibernate- QBC离线查询

    package com.gordon.test; import java.util.List; import org.hibernate.Criteria; import org.hibernate. ...

  2. ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  3. .net 高级写法总结

    1.处理HTTP非正常的请求参数: [1] 获取相应的流转为string [2] request 的只读属性设置为可编辑,类似form [3] 转换为json对象 [4] 重设只读属性 //判断请求类 ...

  4. [mysql] 关联查询sql记录

    //查询账单关联订单 select o.id as id, o.order_no as orderNo, o.case_no as caseNo, o.send_time as sendTime, o ...

  5. HBase系统入门--整体介绍

    转自:http://www.aboutyun.com/thread-8957-1-2.html 问题导读:1.HBase查询与写入哪个更好一些?2.HBase面对复杂操作能否实现?3.Region服务 ...

  6. 回调方法介绍之中国好室友篇(Java示例)

    前言 在Java社区的各种开源工具中,回调方法的使用俯拾即是.所以熟悉回调方法无疑能加速自己对开源轮子的掌握.网上搜了一些文章,奈何对回调方法的介绍大多只停留在什么是回调方法的程度上.本篇文章尝试从回 ...

  7. Netstat命令(windows下)

    功能: 一般用于检验本机各端口的网络连接情况. 例子:检查本机3389远程连接端口是否可用 netstat -nao|find  "3389" 查看某进程使用的端口号: netst ...

  8. (转)sqlite3生成lib遇到的问题

    今天想用一用sqlite,但是下载后发现只有DLL,没有LIB,只能自己生成了.在H:/Program Files/Microsoft Visual Studio 8/VC/bin里面有个lib.ex ...

  9. ubuntu下android源码的下载(最新)

    在ubuntu下下载android源码我断断续续搞了好几个月,希望大家不要向我学习啊!一次性搞定! 这里给大家一些建议啊,如果是看书的话看下书的出版日期,超过一年的基本上失效,网上的也是,特别是在国内 ...

  10. par函数bty参数-控制绘图边框

    bty 可以看作box type 的缩写,控制绘图边框的显示,取值范围为o, l, u, c, ], n 默认值为"o", 代码示例: par(bty = "o" ...