相关说明

所需要的环境

推荐 IntelliJ IDEA 社区版(开源免费)https://github.com/JetBrains/intellij-community

Halo 项目使用了 Lombok,运行 Halo 之前请检查 IDE 是否已经安装好了 Lombok 插件。

如果使用的 IDEIntelliJ IDEA,请在设置中启用 Build, Execution, Deployment/Annotation ProcessorsEnable annotation processing

如果仍然因为 Lombok 报错,请更新 IntelliJ IDEA 至最新版。

克隆项目(Optional)

如果你已经 forkHalo,请将以下命令中的 halo-dev 替换为你的 Github 用户名

  1. git clone https://github.com/halo-dev/halo
  2. // 如果你在 Github 上已经添加了你的 ssh key,请使用以下命令进行 clone:
  3. git clone [email protected]:halo-dev/halo.git
  4. git submodule init
  5. git submodule update

这里推荐使用第二种方式进行克隆,这样每次提交代码的时候,就不会提示登录 Github 了。

导入项目

导入项目的时候请选择 Gradle 项目进行导入。

IntelliJ IDEA 在导入项目的时候请勾选 auto import,推荐使用 gradle wrapper

运行方式

Halo 运行方式总体来讲有以下两种:

直接运行 Application 主类(配合 IDE 运行)

如果需要指定配置,请在 Run/Debug Configuration 内进行设置 VM options(这里推荐采用上文的自定义配置),例如:

  1. -Dspring.profiles.active=dev
  2. -Dhalo.auth-enabled=false
  3. -Dhalo.production-env=false

采用 gradle bootRun task 运行(不需要 IDE)

在项目根目录下运行以下命令:

  1. # 类 Unix 用户
  2. ./gradlew bootRun
  3. # Windows 用户
  4. ./gradlew.bat bootRun

如果需要手动指定配置,可添加 —args 参数(这里推荐采用上文的自定义配置),例如:

  1. # 类 Unix 用户
  2. ./gradlew bootRun --args="--spring.profiles.active=dev --server.port=2333"
  3. # Windows 用户
  4. ./gradlew.bat bootRun --args="--spring.profiles.active=dev --server.port=2333"

如果一切正常且没有额外指定配置,则可根据控制台的输出链接进行访问 Halo

  1. 2019-06-06 16:20:52.285 INFO 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
  2. 2019-06-06 16:20:52.285 INFO 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
  3. 2019-06-06 16:20:52.285 DEBUG 1330 --- [ restartedMain] run.halo.app.listener.StartedListener : Halo doc was enable at http://127.0.0.1:8090/swagger-ui.html # 仅在开发环境才会输出

首次运行的时候,会跳转到博客安装页面,请大家耐心填写完毕,最后正式进入开发之旅

这里推荐一个配置:

keyvalue
用户名test
昵称test
邮箱[email protected]
密码opentest

高级配置

调整启动参数(VMoptions)

运行命令中添加 VM options,例如:

  1. -Dspring.profiles.active=dev

调整启动参数(args)

运行命令中添加参数,例如:

  1. --spring.profiles.active=dev

IDE 一般都会提供一个 Run/Debug 配置,可以添加 VM options参数。以上示例可以直接应用在以命令运行方式上。

启用自动构建(Build project automatically)

在开发环境下,修改代码之后,每次都需要重启应用,是一个非常耗时的操作。

有一个专门解决这个问题的工具,那就是 JRebel,但是它的费用实在是太昂贵,作为普通的开发者很难承受这笔费用(但不推荐使用破解版)。

于是 Halo 最后采用了 Spring Boot 官方推荐的 Developer Tools

这里以 IntelliJ IDEA 为例。

  • 进入 Settings (Preferences on macOS)。
  • 打开 Build, Execution, Deployment > Compiler. 启用 Build project automatically
  • 点击 应用
  • Ctrl+Shift+A (Cmd+Shift+A on macOS)快捷键,然后搜索 Registry。打开之后找到 compiler.automake.allow.when.app.running,并启用它 (IntelliJ IDEA 15 and newer)。

来源于 https://zeroturnaround.com/software/jrebel/quickstart/intellij/enable-automatic-compilation-in-intellij-idea/

Developer Tools 原理

在保存代码的时候,IDE 会自动为我们编译代码,Developer Tools 检测到代码的 class 文件(只能检测 classpath 下的 class 文件)的变更,会自动重启项目。注意,这里的重启速度会有质的提升,具体原因是 Spring Boot 提供的 restart 技术提供了两个 classloadersbase classloaderrestart classloader。当项目重启的时候 restart classloader 将会被抛弃,并重启创建一个,这比 code starts(冷启动)快很多。当然,肯定是比不上 JRebel 采用的 Reload 技术

更多细节请查阅: Automatic Restart