您可以使用 IntelliJ 原生导入器Eclipse Buildship 在 IDE 中打开此示例。

本指南演示了如何使用 gradle init 使用 Gradle 创建 Swift 库。您可以按照指南一步一步地从头开始创建一个新项目,或者使用上面的链接下载完整的示例项目。

Swift 库插件与 配置缓存 不兼容。

您将构建的内容

您将生成一个遵循 Gradle 规范的 Swift 库。

您需要的内容

创建项目文件夹

Gradle 带有一个内置任务,名为 init,它可以在空文件夹中初始化一个新的 Gradle 项目。init 任务使用(同样是内置的)wrapper 任务来创建 Gradle 包装器脚本 gradlew

第一步是为新项目创建一个文件夹,并进入该文件夹。

$ mkdir demo
$ cd demo

运行 init 任务

在新的项目目录中,使用以下命令在终端中运行 init 任务:gradle init。在提示时,选择 2: library 项目类型和 6: Swift 作为实现语言。接下来,您可以选择用于编写构建脚本的 DSL - 1 : Groovy2: Kotlin。对于其他问题,按回车键使用默认值。

输出将如下所示

$ gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 6

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Project name (default: demo):


BUILD SUCCESSFUL
2 actionable tasks: 2 executed

init 任务将生成具有以下结构的新项目

├── gradle (1)
│   ├── libs.versions.toml (2)
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew (3)
├── gradlew.bat (3)
├── settings.gradle.kts (4)
└── lib
    ├── build.gradle.kts (5)
    └── src
        ├── main
        │   └── swift (6)
        │       └── Hello.swift
        └── test
            └── swift (7)
                └── HelloTests.swift
                └── LinuxMain.swift
├── gradle (1)
│   ├── libs.versions.toml (2)
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew (3)
├── gradlew.bat (3)
├── settings.gradle (4)
└── lib
    ├── build.gradle (5)
    └── src
        ├── main
        │   └── swift (6)
        │       └── Hello.swift
        └── test
            └── swift (7)
                └── HelloTests.swift
                └── LinuxMain.swift
1 为包装器文件生成的文件夹
2 生成的版本目录
3 Gradle 包装器启动脚本
4 设置文件,用于定义构建名称和子项目
5 lib 项目的构建脚本
6 默认的 Swift 源代码文件夹
7 默认的 Swift 测试源代码文件夹

您现在已准备好项目,可以构建 Swift 库。

查看项目文件

settings.gradle(.kts) 文件有两行有趣的内容

settings.gradle.kts
rootProject.name = "demo"
include("lib")
settings.gradle
rootProject.name = 'demo'
include('lib')
  • rootProject.name 为构建分配一个名称,这将覆盖默认行为,即根据构建所在的目录为构建命名。建议设置一个固定的名称,因为如果项目被共享(例如作为 Git 存储库的根目录),文件夹可能会发生变化。

  • include("lib") 定义构建包含一个名为 lib 的子项目,其中包含实际代码和构建逻辑。可以通过额外的 include(…​) 语句添加更多子项目。

我们的构建包含一个名为 lib 的子项目,它代表我们正在构建的 Swift 库。它在 lib/build.gradle(.kts) 文件中配置。

lib/build.gradle.kts
plugins {
    `swift-library` (1)
    xctest (2)
}

library {
    targetMachines.add(machines.linux.x86_64) (3)
}
lib/build.gradle
plugins {
    id 'swift-library' (1)
    id 'xctest' (2)
}

library {
    targetMachines.add(machines.linux.x86_64) (3)
}
1 应用 swift-library 插件以添加对构建 Swift 库的支持。
2 应用 xctest 插件以添加对构建和运行 Swift 测试可执行文件(Linux)或捆绑包(macOS)的支持。
3 为该库设置目标操作系统和体系结构。

文件 src/main/swift/Hello.swift 如下所示。

生成的 src/main/swift/Hello.swift
/*
 * This source file was generated by the Gradle 'init' task
 */

class Hello {
    public func greeting() -> String {
        return "Hello, World!"
    }
}

接下来显示生成的测试 src/test/swift/Hello.swift

生成的 src/test/swift/HelloTests.swift
/*
 * This source file was generated by the Gradle 'init' task
 */

import XCTest
@testable import Lib

class HelloTests: XCTestCase {
    public static var allTests = [
        ("testGreeting", testGreeting),
    ]

    func testGreeting() {
        XCTAssertEqual("Hello, World!", Hello().greeting())
    }
}

生成的测试类包含一个 XCTest 测试。该测试实例化 Hello 类,调用其上的方法,并检查它是否返回预期值。

构建库

$ ./gradlew build

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed
第一次运行包装脚本 gradlew 时,可能会延迟一段时间,因为该版本的 gradle 将被下载并存储在您的 ~/.gradle/wrapper/dists 文件夹中。

build 任务编译 Swift 源代码,将目标文件链接到共享库,并运行测试。要构建静态库,请参考 静态库示例

本指南未涵盖对其他项目的依赖关系。要详细了解此主题,请查看 传递依赖关系示例 以进行演示。
将库发布到 Maven 存储库不在本指南的范围内。要详细了解此主题,请查看 简单库示例 以进行演示。
Gradle 与多个 IDE 集成:Visual StudioXcodeClion。要详细了解,请查看其各自的链接文档以配置项目中的这些 IDE 集成。

发布构建扫描

了解构建在幕后如何工作的最佳方式是发布一个 构建扫描。为此,只需使用 --scan 标志运行 Gradle。

$ ./gradlew build --scan

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service.
Do you accept these terms? [yes, no] yes

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/5u4w3gxeurtd2

点击链接,探索执行了哪些任务,下载了哪些依赖项以及更多详细信息!

总结

就是这样!您现在已成功使用 Gradle 配置和构建 Swift 库项目。您已经了解了如何

  • 初始化一个生成 Swift 库的项目

  • 构建库,包括运行其测试

下一步