本手册尚未完善,正在不断更新中。
如果您想帮助我们改进它,我们希望您能这样做,请参阅 README

23 使用 Gradle 构建

构建 Ratpack 应用程序的推荐方式是使用 Gradle 构建系统,通过 Ratpack 项目提供的 Gradle 插件。

Ratpack 纯粹是一个运行时工具包,而不是像 Ruby on RailsGrails 那样的开发时工具。这意味着您可以使用任何您喜欢的工具来构建 Ratpack 应用程序。提供的 Gradle 插件只是为了提供便利,并不是 Ratpack 开发的基础。

1.23 设置

第一个要求是将 Gradle 插件应用于您的 Gradle 项目……

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
  }
}

apply plugin: "io.ratpack.ratpack-java"

repositories {
  mavenCentral()
}

或者对于基于 Groovy 的 Ratpack 项目……

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
  }
}

apply plugin: "io.ratpack.ratpack-groovy"

repositories {
  mavenCentral()
}

'io.ratpack.ratpack-java' 插件应用了核心 Gradle 'java' 插件'io.ratpack.ratpack-groovy' 插件应用了核心 Gradle 'groovy' 插件。这意味着您可以像标准的基于 Gradle 的项目一样开始添加代码和依赖项到您的应用程序(例如,将源代码放在 src/main/[groovy|java] 中)。请注意,'io.ratpack.ratpack-groovy' 插件隐式地应用了 'io.ratpack.ratpack-java' 插件。

2.23 Ratpack 依赖项

要依赖于 Ratpack 扩展库,只需将其添加为常规的实现依赖项……

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
  }
}

apply plugin: "io.ratpack.ratpack-groovy"

repositories {
  mavenCentral()
}

dependencies {
  implementation ratpack.dependency("dropwizard-metrics")
}

使用 ratpack.dependency("dropwizard-metrics") 等同于 "io.ratpack:ratpack-dropwizard-metrics:«ratpack-gradle 依赖项的版本»"。这是添加核心发行版中包含的依赖项的推荐方式。

'io.ratpack.ratpack-java' 插件添加了以下隐式依赖项

'io.ratpack.ratpack-groovy' 插件添加了以下隐式依赖项

可用的库可以通过 search.maven.org 搜索。所有 Ratpack jar 包都发布到 Maven Central

3.23 'application' 插件

'ratpack-java''ratpack-groovy' 插件都应用了核心 Gradle 'application' 插件。此插件提供了创建软件独立可执行发行版的能力。这是 Ratpack 应用程序的首选部署格式。

'application' 插件要求您指定应用程序的主类(即入口点)。您必须在 Gradle 构建文件中配置 'mainClassName' 属性,使其成为包含 'static void main(String[] args)' 方法的类的完全限定类名,该方法配置 Ratpack 服务器。这是由 'ratpack-groovy' 插件预先配置为 GroovyRatpackMain。如果您希望使用自定义入口点,可以更改此设置(请参阅 'application' 插件文档)。

4.23 'shadow' 插件

'ratpack-java''ratpack-groovy' 插件都附带了对第三方 'shadow' 插件 的集成支持。此插件提供了创建自包含的“fat-jar”的能力,该 jar 包括您的 ratpack 应用程序以及任何编译和运行时依赖项。

插件会对 'shadow' 插件的应用做出反应,并配置额外的任务依赖项。它们不会应用 'shadow' 插件,并且出于兼容性原因,不会将 'shadow' 的版本作为依赖项一起提供。

要使用 'shadow' 集成,您需要在您的项目中包含依赖项并应用插件。

buildscript {
  repositories {
    mavenCentral()
    gradlePluginPortal()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
    classpath 'gradle.plugin.com.github.johnrengelman:shadow:7.1.2'
  }
}

apply plugin: "io.ratpack.ratpack-java"
apply plugin: 'com.github.johnrengelman.shadow'

repositories {
  mavenCentral()
}

'shadow' 插件的最新版本可以在项目的 Github 页面 上找到。

您现在可以运行以下命令让构建生成 fat-jar……

./gradlew shadowJar

5.23 基础目录

基础目录实际上是应用程序的文件系统根目录。在构建时,这实际上是应用程序的主要资源集(即 src/main/resources)。Ratpack 插件添加了互补的主要资源源 src/ratpack。您可以选择不使用此目录,而是使用 src/main/resources,或者通过 Gradle 构建中的 ratpack.baseDir 属性更改其位置。

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
  }
}

apply plugin: "io.ratpack.ratpack-groovy"

repositories {
  mavenCentral()
}

ratpack.baseDir = file('ratpack')

当打包为发行版时,插件将在发行版中创建一个名为 app 的目录,其中包含项目的所有主要资源。在通过启动脚本启动应用程序时,此目录将被预先附加到类路径。这允许应用程序直接从磁盘读取基础目录中的文件,而不是从 JAR 中动态解压缩。这更有效率。

有关更多信息,请参见 启动

1.5.23 'ratpack.groovy' 脚本

'ratpack-groovy' 插件希望主要应用程序定义位于 基础目录中ratpack.groovyRatpack.groovy 中。默认情况下,它将实际上在 src/main/resourcessrc/ratpack 中查找。此文件不应放在 src/main/groovy 中,因为应用程序管理此文件的编译。因此,它需要以源代码形式(即作为 .groovy 文件)而不是以编译形式出现在类路径中。

有关此文件内容的更多信息,请参见 Groovy

6.23 运行应用程序

'application' 插件提供了 'run' 任务来启动 Ratpack 应用程序。这是核心 Gradle JavaExec 类型的任务。'ratpack-java' 插件配置了此 'run' 任务,使其以设置了系统属性 'ratpack.development'true 的方式启动。

如果您希望为开发时执行设置额外的系统属性,您可以配置此任务……

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
  }
}

apply plugin: "io.ratpack.ratpack-java"

repositories {
  mavenCentral()
}

run {
  systemProperty "app.dbPassword", "secret"
}

1.6.23 开发时重新加载

Ratpack Gradle 插件与 Gradle 的持续构建功能 集成。要利用这一点,您可以使用 --continuous(或 -t)参数运行 run 任务。

对源代码或资源所做的任何更改都将被编译和处理,并且应用程序将因此被重新加载

2.6.23 使用 'shadow' 插件运行

如果应用于项目,'shadow' 插件将提供 'runShadow' 任务,用于从 fat-jar 启动 Ratpack 应用程序。与 'run' 任务类似,这也是核心 Gradle JavaExec 类型的任务。'shadow' 插件配置了此 'runShadow' 任务,使其使用 java -jar <path/to/shadow-jar.jar> 命令启动进程。

由于应用程序是从打包的 jar 文件中运行的,因此 'runShadow' 任务不支持类重新加载。

可以在此任务上配置额外的系统属性或 JVM 选项……

buildscript {
  repositories {
    mavenCentral()
    gradlePluginPortal()
  }
  dependencies {
    classpath "io.ratpack:ratpack-gradle:2.0.0-rc-1"
    classpath "gradle.plugin.com.github.johnrengelman:shadow:7.1.2"
  }
}

apply plugin: "io.ratpack.ratpack-java"
apply plugin: "com.github.johnrengelman.shadow"

repositories {
  mavenCentral()
}

runShadow {
  systemProperty "app.dbPassword", "secret"
}