Référence Gradle DSL
Chaque propriété et sous-bloc de l'extension Gradle nucleus { }, vérifié sur les sources du plugin.
Le plugin Gradle Nucleus (id("dev.nucleusframework")) expose une seule extension top-level, nucleus, pour configurer l'empaquetage, la signature, la publication et les builds natifs GraalVM depuis Kotlin. Elle s'appuie sur le DSL Compose Desktop de JetBrains et ajoute les formats, surfaces de signature et paramètres GraalVM propres à Nucleus. Cette page liste chaque propriété dans l'ordre où elle apparaît dans les sources du plugin.
Top-level : nucleus { }
dev.nucleusframework.NucleusExtension :
val application: JvmApplication— configuration de l'app JVM (nucleus { application { … } }).val nativeApplication: NativeApplication— cibles macOS Kotlin/Native.val dependencies: NucleusPlugin.Dependencies— coordonnées et notations des modules runtime.
application { } — JvmApplication
from(SourceSet)/from(KotlinTarget)disableDefaultConfiguration()dependsOn(vararg tasks: Task | String)fromFiles(vararg files: Any)var mainClass: String?val mainJar: RegularFilePropertyvar javaHome: Stringval args: MutableList<String>/args(vararg args: String)val jvmArgs: MutableList<String>/jvmArgs(vararg jvmArgs: String)val nativeDistributions: JvmApplicationDistributions— voir ci-dessousval buildTypes: JvmApplicationBuildTypesval graalvm: GraalvmSettings— voir GraalVM
nativeDistributions { } — JvmApplicationDistributions
| Propriété | Type | Notes |
|---|---|---|
modules: ArrayList<String> | — | Défauts : java.base, java.desktop, java.logging, java.net.http, jdk.accessibility, jdk.crypto.ec |
var includeAllModules: Boolean | — | Embarquer chaque module JDK |
var cleanupNativeLibs: Boolean | — | Stripper les libs natives hors cible |
var splashImage: String? | — | Chemin de l'image splash |
var enableAotCache: Boolean | — | Cache AOT JDK 25+ |
var artifactName: String | défaut "${name}-${version}-${os}-${arch}.${ext}" | Template de sortie |
var compressionLevel: CompressionLevel? | — | Store, Normal, Maximum |
val trustedCertificates: ConfigurableFileCollection | — | Certificats CA → cacerts du JDK livré (voir certificats de confiance) |
val protocols: MutableList<UrlProtocol> | — | Protocoles de deep link |
targetFormats: … | hérité | Les 18 formats cibles |
val linux: LinuxPlatformSettings | — | Voir Linux |
val macOS: JvmMacOSPlatformSettings | — | Voir macOS |
val windows: WindowsPlatformSettings | — | Voir Windows |
val publish: PublishSettings | — | Voir publish |
Méthodes :
fun fileAssociation(mimeType, extension, description, linuxIconFile?, windowsIconFile?, macOSIconFile?)fun protocol(name, vararg schemes)- Communes (de
AbstractPlatformSettings) :iconFile,packageVersion,fileAssociation(...)
Enum TargetFormat
18 formats, dans l'ordre des sources :
RawAppImage, Pkg, Deb, Rpm, Dmg, Exe, Msi, Nsis, NsisWeb, Portable, AppX, AppImage, Pacman, Snap, Flatpak, Zip, Tar, SevenZ.
RawAppImage est l'app-image jpackage intermédiaire ; tous les autres formats sont produits par electron-builder. Pkg, AppX et Flatpak sont des formats store et exigent le sandboxing.
macOS { } — JvmMacOSPlatformSettings
Étend AbstractMacOSPlatformSettings. Identification :
packageName: String?,packageVersion,packageBuildVersiondmgPackageVersion,dmgPackageBuildVersion,pkgPackageVersion,pkgPackageBuildVersiondockName: String?,setDockNameSameAsPackageName: Boolean = truebundleID: String?,appCategory: String?,minimumSystemVersion: String?installationPath: String? = null— emplacement d'installation macOS ; quand il est absent, le build retombe sur/ApplicationsiconFile,layeredIconDir(répertoire.iconmacOS 26+)
Signature et sandbox :
entitlementsFile: RegularFileProperty,runtimeEntitlementsFileprovisioningProfile: RegularFileProperty,runtimeProvisioningProfilesigning { … }— voir Signaturenotarization { … }— voir Notarisation
macOS 26 :
macOsSdkVersion: String? = "26.0"—vtoolpatche leLC_BUILD_VERSIONdu launcher Mach-O pour activer Liquid Glass au SDK 26.
Composition :
launchAgents { agent(plistName) { bundleProgram; arguments; startInterval } }infoPlist { extraKeysRawXml }dmg { … }— voir DMG
macOS.signing { } — MacOSSigningSettings
sign: Property<Boolean>(défautfalse)identity: Property<String>keychain: Property<String>prefix: Property<String>
macOS.notarization { } — MacOSNotarizationSettings
Trois modes mutuellement exclusifs :
- Apple ID :
appleID,password,teamID - Profil keychain
notarytool:keychainProfile, optionnelkeychainPath - Clé API App Store Connect :
apiKey,apiKeyId,apiIssuer
macOS.dmg { } — DmgSettings
title: String?,iconSize: Int?,iconTextSize: Int?format: DmgFormat?(UDRW,UDRO,UDCO,UDZO,UDBZ,ULFO)size: String?,shrink: Boolean?,sign: Booleanbackground: RegularFileProperty,backgroundColor: String?icon: RegularFileProperty,badgeIcon: RegularFilePropertywindow { x; y; width; height }content(x, y, type: DmgContentType?, name: String?, path: String?)—DmgContentType:File,Link,Dir
windows { } — WindowsPlatformSettings
iconFile,packageNameconsole: Boolean,dirChooser: Boolean,perUserInstall: Booleanshortcut,menu,menuGroupupgradeUuid: String?,msiPackageVersion,exePackageVersionnsis { … }— voir NSISappx { … }— voir AppXsigning { … }— voir Signature
windows.nsis { } — NsisSettings
oneClick: BooleanallowElevation: Boolean,perMachine: BooleanallowToChangeInstallationDirectory: BooleancreateDesktopShortcut: Boolean,createStartMenuShortcut: BooleanrunAfterFinish: Boolean,deleteAppDataOnUninstall: BooleanmultiLanguageInstaller: Boolean,installerLanguages: List<String>installerIcon,uninstallerIcon,installerHeader,installerSidebarlicense,script,includeScript
windows.appx { } — AppXSettings
applicationId,publisherDisplayName,displayName,publisher,identityNamelanguages: List<String>backgroundColor: String?,showNameOnTiles: BooleanstoreLogo,square44x44Logo,square150x150Logo,wide310x150LogominVersion: String?,maxVersionTested: String?addAutoLaunchExtension: Boolean,setBuildNumber: Boolean
windows.signing { } — WindowsSigningSettings
enabled: BooleancertificateFile,certificatePassword,certificateSha1,certificateSubjectNamealgorithm: SigningAlgorithm(Sha1,Sha256,Sha512)timestampServer: String?- Azure Artifact Signing :
publisherName,azureTenantId,azureEndpoint,azureCertificateProfileName,azureCodeSigningAccountName
linux { } — LinuxPlatformSettings
iconFile,shortcut: Boolean,packageName,packageVersionappRelease: String?,appCategory: String?,menuGroup: String?startupWMClass: String?debMaintainer: String?,debPackageVersion,debDepends: List<String>rpmLicenseType: String?,rpmPackageVersion,rpmRequires: List<String>pacmanPackageVersion: String?,pacmanDepends: List<String>— pour la ciblePacman(Arch Linux)appImage { … }— voir AppImagesnap { … }— voir Snapflatpak { … }— voir Flatpaksigning { … }— voir Signature
linux.signing { } — LinuxSigningSettings
Signe en GPG les DEB/RPM pour la distribution hors store. Voir Signature de code.
enabled: Property<Boolean>(défautfalse)keyId: Property<String>— id de clé GPG, empreinte ou emailkeyFile: RegularFileProperty— clé privée ASCII-armored, importée dans un trousseau jetable (optionnel si la clé est déjà dans le trousseau de signature)passphrase: Property<String>debMethod: DebSignMethod(défautDetached; aussiDpkgSig,Debsig)silentUpdate: Property<Boolean>(défautfalse) — auto-update sans mot de passe avec vérification de signature ; nécessiteenabled. Voir mises à jour sans mot de passe.
Les valeurs par défaut sont lues depuis compose.desktop.linux.sign et compose.desktop.linux.signing.{keyId,keyFile,passphrase,silentUpdate}.
linux.appImage { } — AppImageSettings
category: AppImageCategory?(AudioVideo,Development,Education,Game,Graphics,Network,Office,Science,Settings,System,Utility)genericName: String?,synopsis: String?desktopEntries: Map<String, String>
linux.snap { } — SnapSettings
confinement: SnapConfinement(défautStrict; aussiClassic,Devmode)grade: SnapGrade(défautStable; aussiDevel)summary: String?,base: String?plugs: List<SnapPlug>— 11 par défautautoStart: Booleancompression: SnapCompression?(Xz,Lzo)
SnapPlug : Desktop, DesktopLegacy, Home, X11, Wayland, Unity7, BrowserSupport, Network, NetworkBind, Gsettings, AudioPlayback, AudioRecord, Opengl, RemovableMedia, Cups.
linux.flatpak { } — FlatpakSettings
runtime: String = "org.freedesktop.Platform"runtimeVersion: String = "23.08"sdk: String = "org.freedesktop.Sdk"branch: String = "master"finishArgs: List<String>— défauts :--share=ipc,--socket=x11,--socket=wayland,--socket=pulseaudio,--device=drilicense: RegularFileProperty
publish { } — PublishSettings
publishMode: PublishMode(Never,Auto,Always)github { enabled, owner, repo, token, channel, releaseType }s3 { enabled, bucket, region, path, acl }generic { enabled, url, channel, useMultipleRangeRequest }
ReleaseChannel : Latest, Beta, Alpha.
ReleaseType : Release, Draft, Prerelease.
GraalVM — GraalvmSettings
isEnabled: Property<Boolean>(défautfalse)javaLanguageVersion: Property<Int>(défaut25)jvmVendor: Property<JvmVendorSpec>imageName: Property<String>march: Property<String>(défaut"native")buildArgs: ListProperty<String>nativeImageConfigBaseDir: DirectoryPropertyval macOS: GraalvmMacOSSettings—cStubsSrc,minimumSystemVersion = "12.0",macOsSdkVersion = "26.0"val windows: GraalvmWindowsSettings:bundleCRuntime: Property<Boolean> = true— copie les DLL du runtime MSVC à côté du.exenatifdlls: ListProperty<String>— défauts :vcruntime140.dll,vcruntime140_1.dll,msvcp140.dllsourceDir: DirectoryProperty— répertoire d'où les DLL sont copiées (par défaut lebinde la toolchain GraalVM)
val metadataRepository: MetadataRepositorySettings:enabled: Boolean = trueversion: String = "0.10.6"excludedModules: SetProperty<String>moduleToConfigVersion: MapProperty<String, String>
App native — NativeApplication
Pour l'instant macOS Kotlin/Native uniquement.
targets(vararg targets: KotlinTarget)— doivent êtreKotlinNativeTargetsurFamily.OSXval distributions: NativeApplicationDistributions
Annotations
@ExperimentalNucleusLibrary— marqueur opt-in pour la surface instable du DSL.
Autres types
class FileAssociation(mimeType, extension, description, iconFile?)class UrlProtocol(name, schemes: List<String>)class LaunchAgentSettingsclass JvmApplicationBuildTypesclass ProguardSettingsenum class CompressionLevelenum class SigningAlgorithmenum class ReleaseType,enum class ReleaseChannel,enum class PublishModeenum class SnapGrade,enum class SnapConfinement,enum class SnapCompressionenum class AppImageCategoryenum class DmgFormat,enum class DmgContentType
Notes
Le plugin injecte une ressource nucleus/nucleus-app.properties dans l'app empaquetée, contenant app.id, app.version, app.vendor, app.aumid, startup.task.id et d'autres clés du même genre. L'objet NucleusApp les lit au démarrage : c'est ainsi que la configuration du DSL parvient à la bibliothèque runtime.
Et ensuite
- Configuration — le DSL
nucleus { }dans un script de build concret. - Formats d'empaquetage — ce que produit chaque
TargetFormat. - Signature de code — les blocs de signature macOS, Windows et Linux.
- Publication — le bloc
publish { }et les canaux de release.