Градл это про выполнение задач т.н. tasks, они предоставляются разными плагинами. Стандартный набор в пакете «Core Plugins», интересует категория «Utility».
# Инициализация проекта, в директории создаются служебные файлы и т.д. gradle init --type java-application
Есть несколько вариантов, один из это подключить плагин, в файле «build.gradle.kts» добавляем
plugins { id(«com.github.johnrengelman.shadow») }
Тут модификация shadowJar для того чтобы в имя файла не добавлялся постфикс «-all»
Так же можно явно задавать имя артефакту
Так же таска для публикации в nexus
plugins { application java id("com.github.johnrengelman.shadow") id("com.coditory.manifest") id("maven-publish") } dependencies { (зависимости могут варьироваться) implementation(Deps.toml) implementation(Deps.opencsv) } application { mainClass.set("com.gmware.applications.(тут какой то класс)") } group = "com.gmware.applications" version = "0.0.0.1-SNAPSHOT" // При желании, так можно получить хэш последнего коммита, для записи в манифест fun getGitCommit(): String { val result = StringBuilder() val process = ProcessBuilder("git", "rev-parse", "HEAD").start() process.inputStream.reader(Charsets.UTF_8).use { result.append(it.readText()) } process.waitFor() return result.toString().trim() } tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass, "Version" to version, "Module-version" to getGitCommit() )) } } } publishing { repositories { maven { url = uri("${properties["nexusUrl"]}/myApp-snapshot") credentials { username = "${properties["nexusUser"]}" password = "${properties["nexusPassword"]}" } } } publications { register("mavenJava", MavenPublication::class) { artifact(tasks["shadowJar"]) } } }
Избавится от постфикса «-all» в имени джарки
параметр «jar.archiveClassifier.set(»«)«
# Вариант с таской shadowJar tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass, "Version" to version, "Module-version" to getGitCommit() )) } } } # Таска с Jar fun configureJar(jar: Jar) { jar.setManifestClassPathToRuntimeDependencies() jar.doFirst { jar.manifest { attributes["Main-Class"] = application.mainClass attributes["Module-Name"] = jar.archiveBaseName.get() attributes["Module-Commit-Date"] = getCommitDate() attributes["Created-By"] = System.getProperty("java.version") } } jar.archiveFileName.set("my-name.jar") jar.archiveClassifier.set("") }
plugins { id("application") id("com.github.johnrengelman.shadow") } application { mainClass.set("com.gmware.applications.myMainClass") } dependencies { implementation(projects.utils) implementation(projects.common) (...) implementation(projects.limitsmanagerLoader) } fun getGitCommit(): String { requireExecutionPhase() val result = StringBuilder() val process = ProcessBuilder("git", "rev-parse", "HEAD").start() process.inputStream.reader(Charsets.UTF_8).use { result.append(it.readText()) } process.waitFor() return result.toString().trim() } tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass, "Module-version" to getGitCommit() )) } } }
plugins { application java shadow id("com.coditory.manifest") id("maven-publish") } dependencies { implementation(projects.utils) ... } application { mainClass.set("com.gmware.applications.<module_name>") } group = "com.gmware.applications.<repo_group_name>" version = "0.0.0.1-SNAPSHOT" // Перед сборкой установить версию tasks { "shadowJar"(com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar::class) { archiveClassifier.set("") manifest { attributes(mapOf( "Main-Class" to application.mainClass )) } } } publishing { repositories { maven { url = uri("${properties["nxsUrl"]}/my-repo") credentials { username = "${properties["nxsUsr"]}" password = "${properties["nxsPasswd"]}" } } } publications { register("mavenJava", MavenPublication::class) { artifact(tasks["shadowJar"]) } } }
Сборка и загрузка в репозиторий
./gradlew -PnexusUrl=https://url/repository -PnexusUser=<user> -PnexusPassword=<passwd> :module-name:publish
# Уровень языка с которым компилируется код # java { sourceCompatibility = JavaVersion.VERSION_1_8 (максимальная версия java) targetCompatibility = JavaVersion.VERSION_1_8 (минимальная версия java) } # Информация о классе javap -verbose HelloWorldApp.class