这两天我尝试在业余时间做一个 Side Project,对 ZooKeeper 做一些修改来实现一个大胆的想法。之前也做过几个项目,但是没有一个系统是像 ZooKeeper 这样的基础设施,也没有一个项目的工具链像 ZooKeeper 这样陈旧,还在用 Ant 管理项目,用 Ivy 下载依赖,用 jute 定义 RPC……简直就是在逛古董店啊!

这里分享一下我在 OS X El Capitan 上构建 ZooKeeper 开发环境过程中增长的人生经验。

===

源码自然是从 apache/zookeeper 抓取,clone 下来之后先 git checkout release-3.4.8 把代码恢复到最新的 stable,然后以这个 tag 为基准拉出自己的开发分支。

IntelliJ 并没有提供 Ant 项目导入,默认只支持 Maven、Gradle 和 Eclipse 等几个还有活力的项目管理工具。

既然我们不能 Import,就只能 Open 了,直接用 IntelliJ IDEA 去打开项目所在的目录。这时候 IDEA 会认为整个项目里的文件都是普通文本,并不能识别出这是一个 Ant 管理的 Java 项目。我们需要给 IDEA 一些信息。先配置一下 Ant Build,让 IDEA 知道这个项目有哪些 Ant 任务。

然后执行 bin-package 这个任务,先构建出一个 ZooKeeper 分发包,构建结果和下载下来的依赖都在 build 目录。

到此为止,ZooKeeper 的服务端已经能够从 Ant 构建了,但是 IDEA 还没全完配置好,比如还没识别哪些文件是 Java 代码,也就会出现这样的情况。

这时候 IDEA 的 Project Structure 设置开始粉墨登场。

这里也能看到 IDEA 只知道项目目录,不知道项目中哪些目录是 Source,哪些目录是 Resource。ZooKeeper 的目录那么多,项目结构我也不熟,要让我一个一个目录添加真是要命。于是我偷了个懒,先把项目目录从 Project Structure 中删了,再加回去,这时候 IDEA 就会帮我分析出有 Java 代码的目录。

这目录也太多了啊,连 build 目录都给我加进来,真想对 IDEA 说一句「妈的智障」。我只好手动调整,把 build 目录排除,把带 test 的目录标记为 Tests,自动生成的目录标记为 Generated,如此这般就把 ZooKeeper 的代码目录结构整理清楚了。

如此这般之后就可以愉快地 Coding 了~

另外,我在 JetBrains 全家桶上又遇到了 Case Sensitive 文件系统带来的问题。一打开 ZooKeeper 项目就给我提示这个:

其实也简单,就按照提示里说的,去给 IDEA 加个启动参数就好了。在 /Applications/IntelliJ IDEA.app/Contents/bin/idea.properties 里追加 idea.case.sensitive.fs=true 即可。

在 IntelliJ IDEA 中定制开发 ZooKeeper相关推荐

  1. IntelliJ IDEA中ajax开发实现分页查询

    此文章的图片被简书禁止访问了, 可以上简书查看此文章. 链接如下 https://www.jianshu.com/p/1fd6b39e98ac IntelliJ IDEA中ajax开发实现分页查询 文 ...

  2. 在IntelliJ IDEA中,开发一个摸鱼看书插件

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/R8qvoSNyedVM95Ty8sbhgg 沉淀.分享.成长,让自己和他人都能 ...

  3. spark (java API) 在Intellij IDEA中开发并运行

    Spark 程序开发,调试和运行,intellij idea开发Spark java程序.  分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中运行 ...

  4. nginx模块定制开发中介入http模块的方法及NGX_HTTP_CONTENT_PHASE阶段的详细介绍

    ginx模块定制开发中,大多数都是针对http的模块的定制开发,比如添加一个打印"hello world"的功能.记录http请求内容.对http请求作出一个特殊响应等,此时,需要 ...

  5. 直播系统定制开发中安卓直播间websocket协议破解还原

    前言 现如今在直播系统定制开发中直播间协议很多已经很少使用http轮询的方式获取直播间的弹幕.礼物.关注等,在用的目前知道的是某音的直播,其他的一些app已经使用socket或者websoceket获 ...

  6. 中视伟业3516CV500+IMX327,3519AV100+IMX334,人脸、人型检测,人脸、人型抓拍,HTTP 上传,GB2818.13519AV100人脸网关录像机,AI方案商,定制开发

    中视伟业 HI3516CV500/HI3516DV300/HI3519AV100/HI3559A等神经网络算力芯片方案 中视伟业16CV500+IMX327,19AV100+IMX334,人脸.人型检 ...

  7. 如何修复 WordPress 定制开发中登录重定向循环?

    WordPress 登录重定向循环意味着什么.WordPress 无法对您进行身份验证并授予对 WordPress 仪表板的访问权限,身份验证过程中遇到的问题使WordPress 返回登录页面.那么如 ...

  8. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  9. 软件开发中成品开发和定制开发的区别,你知道吗?

    软件外包分为成品开发和定制开发,就如上面所说价格差距是很大的,因为软件开发成品和定制本身就是两码事,该如何选择我们一一细说: 1.成品 所谓的成品就是软件开发公司以往已经完成开发的APP产品,或软件开 ...

最新文章

  1. 分解原理_基于矩阵分解原理的推荐系统
  2. postgresql pgsql登录及创建用户
  3. 为什么编程语言初创公司那么少?
  4. Python连接Mysql数据库入门
  5. vue实现搜索框记录搜索历史_2018-09-13 基于Vue的搜索栏功能实现(we-ui)
  6. maven 构建依赖树_Maven构建依赖项
  7. 【DeepLearning】Exercise:Learning color features with Sparse Autoencoders
  8. 利用IDEA创建hadoop文件
  9. C语言约瑟夫环(简单版)
  10. R7000刷梅林固件一个小结(变砖解决)
  11. notepad黑色主题
  12. 单位根检验urdf_adf单位根检验(单位根检验的基本步骤)
  13. 关于微信小程序的navigator标签
  14. 论文阅读《Revisiting Domain Generalized Stereo Matching Networks from a Feature Consistency Perspective》
  15. BOM成本计算成最下级算到最上级
  16. Linux 使用ffmpeg修改和压缩视频文件格式
  17. HTML常用的标签:
  18. 华为云主机安全助力企业种出“金葫芦”
  19. 振作只需一个理由:日子不能这样过
  20. C++小木棍题解代码(备用)

热门文章

  1. php利用引用实现树形数组
  2. 如何扩展Laravel Auth来满足项目需求
  3. Python入门7_抽象进阶
  4. 超级详细的手写webpack4配置来启动vue2项目(附配置作用)
  5. 第二章 在Linux上部署.net core
  6. Yaf框架视频教程之入门篇【已完成】
  7. 在NAS上基础构建云存储系统的两种解决方案
  8. Helixoft VSdocman 是一个集成于Visual Studio并提供了命令行版本的帮助文档编译工具...
  9. Linux下SSH Session复制
  10. IT公司100题-14-排序数组中和为给定值的两个数字