build(gradle): 重构构建配置并添加新功能

- 更新 Shadow 插件版本
- 添加 JDK 版本检查
- 分离依赖项到 libs 目录- 修改 jar 任务以包含 Class-Path 属性
- 更新测试配置
- 添加开源文档处理和打包功能
- 创建可运行分发包
- 设置默认构建任务
This commit is contained in:
tzdwindows 7
2025-02-10 21:20:56 +08:00
parent 62abd4bdbc
commit dc4ca24533

View File

@@ -1,10 +1,10 @@
plugins {
id 'java'
id 'application'
id 'com.github.johnrengelman.shadow' version '7.1.2'
id 'edu.sc.seis.launch4j' version '2.5.4'
}
// JDK 版本检查
def requiredJavaVersion = 20
def currentJavaVersion = JavaVersion.current().majorVersion.toInteger()
if (currentJavaVersion != requiredJavaVersion) {
@@ -39,19 +39,80 @@ dependencies {
implementation 'org.ow2.asm:asm-tree:7.1'
}
// 分离依赖项到 libs 目录
task copyDependencies(type: Copy) {
from configurations.runtimeClasspath
into "$buildDir/libs/libs"
}
// 执行我生成jar
jar {
manifest {
attributes 'Main-Class': 'com.axis.innovators.box.Main'
attributes 'Main-Class': 'com.axis.innovators.box.Main',
'Class-Path': configurations.runtimeClasspath.files.collect { "libs/$it.name" }.join(' ')
}
dependsOn copyDependencies
}
// 测试配置
test {
useJUnitPlatform()
systemProperty "java.system.class.loader", "com.axis.innovators.box.plugins.BoxClassLoader"
// 确保测试能看到依赖
classpath = files(sourceSets.test.output) +
files("$buildDir/libs/libs") +
configurations.testRuntimeClasspath
}
// 处理开源文档文件
sourceSets {
main {
resources {
exclude '**/*.md'
}
}
openSourceDocs {
resources {
srcDir 'src/main/resources'
include '**/*.md'
}
}
}
// 单独打包文档
task packageOpenSourceDocs(type: Jar) {
archiveClassifier = 'docs'
from sourceSets.openSourceDocs.resources
destinationDirectory = file("$buildDir/libs/docs")
}
// 完整的 application 配置
application {
mainClass = 'com.axis.innovators.box.Main'
// 确保运行时参数生效
applicationDefaultJvmArgs = [
"-Djava.system.class.loader=com.axis.innovators.box.plugins.BoxClassLoader"
"-Djava.system.class.loader=com.axis.innovators.box.plugins.BoxClassLoader",
"-Dloader.library.path=$buildDir/libs/libs"
]
}
test {
useJUnitPlatform()
}
// 创建可运行分发
tasks.register('release') {
dependsOn build, packageOpenSourceDocs
doLast {
copy {
from "$buildDir/libs"
into "$buildDir/dist"
include '*.jar'
include 'docs/**'
include 'libs/**'
}
println "Release package ready at: $buildDir/dist"
}
}
// 默认构建任务
build.dependsOn release