====== Gradle ====== ===== Сведения =====
:!: Сведения Градл это про выполнение задач т.н. **tasks**, они предоставляются разными плагинами. Стандартный набор в пакете "Core Plugins", интересует категория "Utility".\\ # Инициализация проекта, в директории создаются служебные файлы и т.д. gradle init --type java-application
===== Использование ===== ==== ShadowJar ==== Есть несколько вариантов, один из это подключить плагин, в файле "build.gradle.kts" добавляем\\ **plugins { id("com.github.johnrengelman.shadow") }**\\ [[https://romanmarkunas.com/build/2018/11/13/0007-build-gradle-fat-jars/|Тут есть описание]]\\
:!: Типичный скрипт для сборки Тут модификация 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("") }
:!: Еще пример shadowJar 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.") } group = "com.gmware.applications." 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= -PnexusPassword= :module-name:publish
:!: Разное # Уровень языка с которым компилируется код # java { sourceCompatibility = JavaVersion.VERSION_1_8 (максимальная версия java) targetCompatibility = JavaVersion.VERSION_1_8 (минимальная версия java) } # Информация о классе javap -verbose HelloWorldApp.class