Skip to content

📦 构建系统架构 ​

架构 构建系统

ClassySharkWS 是一个非典型的 Gradle Java 项目:group 'classyshark'、version '1.0.0',应用 java 与 java-library-distribution 插件,源码沿用 src/(非 src/main/java)旧布局,并产出一个内嵌全部依赖的单 JAR ClassySharkWS-all.jar。

构建坐标与插件 ​

ClassySharkWS/build.gradle 的头部直接声明坐标与能力:

声明值说明
groupclassyshark项目坐标组名
version1.0.0当前版本
apply pluginjava提供 compile/test/jar 生命周期
apply pluginjava-library-distribution提供 distZip / distTar 分发任务
sourceCompatibility1.8字节码目标 Java 8
groovy
group 'classyshark'
version '1.0.0'

apply plugin: 'java'
apply plugin: 'java-library-distribution' // task: gradle distZip

sourceCompatibility = 1.8

非标准源码布局 ​

ClassyShark 沿用旧式目录——java 与资源都在 src/ 下,而不是 Gradle 默认的 src/main/java 与 src/main/resources。构建脚本用 sourceSets 显式指回:

groovy
// ClassyShark doesn't follow the standard src/main/java convention
sourceSets {
    main {
        java {
            srcDirs = ['src/']
        }
        resources {
            srcDirs = ['src/']
        }
    }
}

💡 这也是配置资源(*.png 图标、classyshark_ui.properties)能被 jar 打包的根源——它们与 .java 同目录,被 resources 块一并收入。

仓库与依赖来源 ​

依赖分两个仓库:flatDir 指向仓库根目录的 ../third_party(相对 ClassySharkWS/),mavenCentral() 提供其余构件:

groovy
repositories {
    flatDir {
        dirs '../third_party'
    }
    mavenCentral()
}
来源构件版本
third_party (flatDir)asmdex-1.0.jar1.0
third_party (flatDir)util-2.0.6.jar2.0.6
third_party (flatDir)java-binutils.jar—
Maven Centralorg.ow2.asm:asm-all5.2
Maven Centralorg.smali:dexlib22.2.7
Maven Centralorg.apache.bcel:bcel6.5.0
Maven Centralcom.squareup.retrofit2:converter-gson2.9.0
Maven Centralcom.google.code.gson:gson-parent2.9.0
Maven Centralcom.google.guava:guava31.1-jre
Maven Centralcom.squareup.okhttp3:okhttp4.10.0
Maven Centralcom.squareup.okio:okio3.2.0
Maven Centralcom.squareup.retrofit2:retrofit2.9.0

🔍 每个库的用途与使用模块清单见 依赖架构。

产物任务 ​

jar:可执行瘦包 ​

jar 任务在 manifest 写入 Main-Class 并声明 Class-Path,运行 gradle jar 后配合 java -jar 可直接启动(依赖在旁 lib/ 目录):

groovy
jar {
    manifest {
        attributes(
                'Main-Class': 'com.google.classyshark.Main',
                "Class-Path": configurations.compile.collect { "lib/$it.name" }.join(' ')
        )
    }
}

fatJar:全依赖单 JAR ​

fatJar 把 configurations.compile 里的每个 jar 解包后与自身字节码合并成一个自包含包——这是发布给用户的 ClassySharkWS-all.jar,无需外部依赖即可运行:

groovy
task fatJar(type: Jar) {
    manifest { attributes('Main-Class': 'com.google.classyshark.Main') }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

distZip ​

java-library-distribution 插件带来的 gradle distZip 会产出标准分发目录(bin/、lib/、ClassySharkWS-1.0.0/),供手工解压部署。

构建产物矩阵 ​

任务产物依赖适用场景
gradle jarClassySharkWS.jar外部 lib/ + Class-Path开发调试
gradle fatJarClassySharkWS-all.jar无(内嵌全部)用户发布、CI 用
gradle distZipClassySharkWS-1.0.0.zip标准 lib/bin 布局分发安装

⚠️ sourceCompatibility = 1.8 意味着构建产物面向 Java 8+ 运行时;若宿主 JVM 是更高版本请用 --release 等价语义的 JDK 构建。

设计要点 ​

  • 🏛️ 旧布局兼容 — srcDirs = ['src/'] 保留历史目录,无需迁移文件即构建。
  • 🪆 双产物策略 — 瘦 jar(Class-Path)面向本地开发,fatJar 面向分发,用户零配置运行。
  • 📚 本地 + 远端混合仓库 — 闭源/遗留 jar 走 third_party,开源构件走 Maven Central,取舍清晰。
  • 🎯 单一入口 — 两类产物 manifest 都指向 com.google.classyshark.Main,与 入口层架构 呼应。

进一步阅读 ​

最后更新:

基于 Apache 2.0 协议发布