23 使用 Gradle 构建
构建 Ratpack 应用程序的推荐方式是使用 Gradle 构建系统,通过 Ratpack 项目提供的 Gradle 插件。
Ratpack 纯粹是一个运行时工具包,而不是像 Ruby on Rails 和 Grails 那样的开发时工具。这意味着您可以使用任何您喜欢的工具来构建 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'
插件添加了以下隐式依赖项
ratpack-core
- implementationratpack-test
- testImplementation
'io.ratpack.ratpack-groovy'
插件添加了以下隐式依赖项
ratpack-groovy
- implementation(依赖于ratpack-core
)ratpack-groovy-test
- testImplementation(依赖于ratpack-test
)
可用的库可以通过 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.groovy
或 Ratpack.groovy
中。默认情况下,它将实际上在 src/main/resources
和 src/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"
}