菜单

从源代码构建

相关源文件

本文档提供了从源代码构建Stirling-PDF应用程序的全面说明。这些说明适用于希望修改代码库或构建自定义应用程序版本的开发者。

有关构建后的部署选项,请参阅部署

构建过程概述

下图说明了Stirling-PDF的整体构建过程

来源: build.gradle1-12 build.gradle331-362 build.gradle115-225 build.gradle227-280 build.gradle227-280 build.gradle227-280 build.gradle227-280

先决条件

在构建Stirling-PDF之前,请确保已安装以下必备软件

  • Java Development Kit (JDK)
    • 最低要求:JDK 17
    • 推荐:JDK 21
  • Gradle:版本8.12或更高版本(仓库中已包含wrapper)
  • Git:用于克隆仓库

来源: build.gradle34-37 build.gradle393-394

基本构建流程

克隆仓库

首先,从GitHub克隆仓库

运行基本构建

要构建一个基本的JAR文件,请运行

在Windows上,请使用

此过程

  1. 编译Java源代码
  2. 运行测试
  3. build/libs 目录中创建一个名为 Stirling-PDF-{version}.jar 的JAR文件

当前版本定义在 build.gradle 文件中(上次更新时版本为0.45.6)。

来源: build.gradle32 build.gradle571-582

构建配置选项

环境变量

Stirling-PDF的构建可以通过环境变量进行自定义,这些变量控制包含哪些组件

可变描述默认
DOCKER_ENABLE_SECURITY控制是否包含安全功能true
STIRLING_PDF_DESKTOP_UI控制是否包含桌面UI功能true

下图显示了这些环境变量如何影响包含的源文件

来源: build.gradle50-98

构建无安全功能版本

要构建无安全功能版本(创建最小化版本)

这将排除

  • stirling/software/SPDF/config/security/ 中的安全配置
  • 用户和数据库控制器
  • 认证模型
  • 用户模型
  • 存储库类

构建无桌面UI版本

要构建无桌面UI功能版本

这将排除 stirling/software/SPDF/UI/impl/ 中的桌面UI实现。

代码风格和格式化

Stirling-PDF使用Google Java Format风格。构建会自动应用Spotless插件的代码格式化。要手动格式化代码

来源: build.gradle364-376 build.gradle537-540

构建特定输出

下图显示了构建输出目录的结构

来源: build.gradle115-225 build.gradle227-280 build.gradle331-362

构建JAR文件

要单独构建JAR文件

这将在 build/libs 目录中创建一个Spring Boot可执行JAR。

来源: build.gradle571-578

构建Windows EXE

构建Windows可执行文件

这使用Launch4j创建了一个包装JAR文件的EXE文件。Launch4j配置包括

  • 图标设置
  • 标题类型(GUI或控制台,取决于STIRLING_PDF_DESKTOP_UI
  • Java要求(最低版本17)
  • 错误消息和窗口属性

来源: build.gradle331-362

构建特定平台的安装程序

为当前平台构建安装程序

这将在 build/jpackage 目录中创建特定于平台的安装程序

  • Windows: .exe 安装程序
  • macOS: .dmg 文件
  • Linux: .deb 包(默认)或 .rpm

安装程序配置包括不同平台的设置、应用程序元数据和运行时选项。

来源: build.gradle115-225 build.gradle227-280 build.gradle331-362

macOS特定构建

macOS x86_64 特定构建

这将创建一个Intel特定的macOS安装程序。该任务在需要时下载临时的JRE,并专门为x86_64架构打包应用程序。

来源: build.gradle227-280 build.gradle284-329

构建所有输出

构建所有输出(JAR、EXE和特定平台的安装程序)

高级构建选项

打包应用程序的Java选项

打包应用程序的JVM选项定义在 jpackage 配置的 javaOptions 数组中。这些选项控制应用程序通过特定平台的安装程序安装时如何运行,并包括

-DBROWSER_OPEN=true
-DSTIRLING_PDF_DESKTOP_UI=true
-Djava.awt.headless=false
-Dapple.awt.UIElement=true
--add-opens=java.base/java.lang=ALL-UNNAMED

以及用于桌面UI功能的其他模块开放。

来源: build.gradle129-141

平台特定配置

Windows 配置

Windows特定构建设置包括

  • 安装目录(C:/Program Files/Stirling-PDF
  • 开始菜单和桌面快捷方式
  • Windows菜单组(Stirling Software
  • 用于安装程序更新的升级UUID

来源: build.gradle144-160

macOS 配置

macOS特定构建设置包括

  • 版本格式(基于年份,例如0.11.5 → 2024.11.5)
  • 应用程序类别(public.app-category.productivity
  • 包标识符和名称

来源: build.gradle109-113 build.gradle163-182

Linux配置

Linux特定构建设置包括

  • 包格式(deb/rpm)
  • 菜单组(Office;PDF;Productivity
  • 安装目录(/opt/Stirling-PDF

来源: build.gradle185-202

版本管理

项目版本定义在 build.gradle 中(当前为0.45.6)。writeVersion 任务会创建一个 version.properties 文件,该文件会被包含在构建的应用程序中。

打印当前版本

对于macOS,版本使用 getMacVersion 函数转换为基于年份的格式。

来源:build.gradle32 build.gradle109-113 build.gradle545-558 build.gradle584-588

疑难解答常见的构建问题

Java 版本问题

如果您遇到与 Java 版本相关的错误,请确保您使用的是 JDK 17 或更高版本

Java 版本要求在构建文件的 java 部分指定。虽然 JDK 17 是最低支持版本,但建议使用 JDK 21。

来源:build.gradle34-37

依赖解析问题

如果构建因依赖问题而失败,请尝试

该项目依赖于众多库,包括

  • Spring Boot 框架(版本 3.4.4)
  • Apache PDFBox(版本 3.0.4)
  • 各种图像处理库
  • 安全库(启用安全功能时)

来源:build.gradle405-533

平台特定的构建问题

Windows 问题

  • 确保您具有执行 Gradle 和创建文件的足够权限
  • 对于 Launch4j(创建 EXE)问题,请验证您是否安装了 Microsoft Visual C++ Redistributable 包

macOS 问题

  • 对于代码签名问题,您可能需要配置签名证书(目前默认禁用)
  • 对于 Apple Silicon (M1/M2) Mac 上的 jpackage 问题,jpackageMacX64 任务会下载 x86_64 JRE

Linux 问题

  • 确保您拥有构建所需的包(build-essential 等)
  • 对于 .deb/.rpm 的创建,您可能需要安装额外的打包工具

来源:build.gradle227-280 build.gradle144-160 build.gradle185-202

其他参考

有关部署选项的更多信息,请参阅 部署

有关贡献新功能的更多信息,请参阅 添加新功能

有关 CI/CD 流水线的详细信息,请参阅 CI/CD 流水线