diff --git a/build.gradle b/build.gradle index 38d38f3..186a3ec 100644 --- a/build.gradle +++ b/build.gradle @@ -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() -} \ No newline at end of file +// 创建可运行分发 +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 \ No newline at end of file