1 new
https://plugins.gradle.org/plugin/com.gradleup.shadow
plugins {
id("com.gradleup.shadow") version "9.0.0-beta4"
// kotlin("jvm") version "2.0.21"
kotlin("jvm")
}
tasks {
shadowJar {
// Specify the main class to run
manifest {
attributes["Main-Class"] = "ir.rezajax.MainKt" // Replace with your main class path
}
archiveBaseName.set("my-shadow-jar") // Name of the JAR file
archiveVersion.set("1.0.0") // Set the version if necessary
mergeServiceFiles() // Optional: Merges service files from dependencies
}
}
2 old
https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow

// put in plugins
id("com.github.johnrengelman.shadow") version "8.1.1"
tasks.named<Jar>("shadowJar") {
group = "build"
description = "build with shadowJAR"
archiveClassifier.set("shadow")
manifest {
attributes("Main-Class" to "MainKt") // نام کلاس اصلی
}
}دلیل تفاوت در پیادهسازی این دو نمونه استفاده از دو پلاگین مختلف برای ساخت فایل Shadow JAR است. هر پلاگین روش خاص خود را برای تعریف وظایف و پیکربندیها دارد.
توضیح دو پلاگین:
-
پلاگین
com.gradleup.shadow:- این پلاگین نسخهای غیررسمی از پلاگین Shadow است که توسط GradleUp توسعه یافته است.
- سینتکس و تنظیمات آن کمی مدرنتر و مبتنی بر DSLهای جدید Gradle است.
- در این پلاگین، وظایف ShadowJar به صورت مستقیم در قالب
tasksتعریف میشود.
-
پلاگین
com.github.johnrengelman.shadow:- این پلاگین نسخه رسمی Shadow است که توسط جامعه Kotlin و Gradle بهطور گسترده استفاده میشود.
- این پلاگین بهصورت استاندارد پیکربندی وظایف را با استفاده از متد
tasks.named<Jar>ارائه میدهد. - همچنین نام پلاگین اشاره به نسخه پایدار و رسمی آن دارد.
تفاوتها در پیادهسازی:
1. تعریف tasks:
- در پلاگین اول (
com.gradleup.shadow): وظیفهshadowJarمستقیماً در بخشtasksتعریف میشود و به روشی سادهتر قابل پیکربندی است. - در پلاگین دوم (
com.github.johnrengelman.shadow): از متدtasks.named<Jar>("shadowJar")استفاده میشود که به نوع وظیفه (Task Type) اشاره دارد.
2. ساختار پیکربندی:
- پلاگین اول از متد
manifestبهصورت مستقیم در داخل پیکربندیshadowJarاستفاده میکند. - پلاگین دوم از متد
manifestبه همراه یک آرایهattributesاستفاده میکند.
3. امکانات اضافی:
- پلاگین اول متدی مانند
mergeServiceFiles()ارائه میدهد که فایلهای سرویسها را از وابستگیها ادغام میکند. - پلاگین دوم چنین متدی را مستقیماً در تنظیمات اولیه ارائه نمیدهد و ممکن است نیاز به تعریف دستی باشد.
نکات مهم:
- اگر از نسخه رسمی و پایدار میخواهید استفاده کنید، بهتر است پلاگین
com.github.johnrengelman.shadowرا ترجیح دهید. - اگر پلاگین مدرنتر با سینتکس خلاصهتر و امکانات پیشرفتهتر را میخواهید، میتوانید از
com.gradleup.shadowاستفاده کنید.
هر کدام را بر اساس نیاز پروژه و وابستگیهایتان انتخاب کنید.