Adam
09/23/2025, 8:53 PMnet.rubygrapefruit:native-platform in a pet project but it has a lot of variants for specific OSes that are downloaded unnecessarily. It seems to be published without Gradle module metadata. Is there an existing ComponentMetadataRule so I can only download a suitable variant for the current OS & arch?Vampire
09/23/2025, 9:30 PMVampire
09/23/2025, 9:40 PMVampire
09/23/2025, 10:09 PMdependencies {
components {
withModule("net.rubygrapefruit:native-platform") {
addVariant("runtimeLinuxAmd64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("linux-amd64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.LINUX))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.X86_64))
}
}
addVariant("runtimeLinuxAarch64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("linux-aarch64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.LINUX))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.ARM64))
}
}
addVariant("runtimeWindowsI386", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("windows-i386").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.WINDOWS))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.X86))
}
}
addVariant("runtimeWindowsAmd64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("windows-amd64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.WINDOWS))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.X86_64))
}
}
addVariant("runtimeOsxAmd64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("osx-amd64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.MACOS))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.X86_64))
}
}
addVariant("runtimeOsxAarch64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("osx-aarch64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(OperatingSystemFamily.MACOS))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.ARM64))
}
}
addVariant("runtimeFreebsdAmd64", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains("freebsd-amd64").not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named("freebsd"))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(MachineArchitecture.X86_64))
}
}
}
}
}Vampire
09/23/2025, 10:14 PMdependencies {
components {
withModule("net.rubygrapefruit:native-platform") {
listOf(
Triple("linux-amd64", OperatingSystemFamily.LINUX, MachineArchitecture.X86_64),
Triple("linux-aarch64", OperatingSystemFamily.LINUX, MachineArchitecture.ARM64),
Triple("windows-i386", OperatingSystemFamily.WINDOWS, MachineArchitecture.X86),
Triple("windows-amd64", OperatingSystemFamily.WINDOWS, MachineArchitecture.X86_64),
Triple("osx-amd64", OperatingSystemFamily.MACOS, MachineArchitecture.X86_64),
Triple("osx-aarch64", OperatingSystemFamily.MACOS, MachineArchitecture.ARM64),
Triple("freebsd-amd64", "freebsd", MachineArchitecture.X86_64),
).forEach { (classifier, os, arch) ->
addVariant("runtime-$classifier", "runtime") {
withDependencies {
removeIf {
it.name.startsWith("native-platform-") && it.name.contains(classifier).not()
}
}
attributes {
attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, objects.named(os))
attribute(MachineArchitecture.ARCHITECTURE_ATTRIBUTE, objects.named(arch))
}
}
}
}
}
}