11package org.processing.java.gradle
22
33import org.gradle.api.DefaultTask
4- import org.gradle.api.GradleException
4+ import org.gradle.api.file.DirectoryProperty
55import org.gradle.api.file.RegularFileProperty
66import org.gradle.api.tasks.InputFile
7+ import org.gradle.api.tasks.OutputDirectory
8+ import org.gradle.api.tasks.OutputFile
79import org.gradle.api.tasks.TaskAction
810import java.io.File
911import java.io.ObjectInputStream
@@ -15,12 +17,16 @@ abstract class DependenciesTask: DefaultTask() {
1517 @InputFile
1618 val librariesMetaData: RegularFileProperty = project.objects.fileProperty()
1719
20+ @get:OutputDirectory
21+ val outputJarsDirectory: DirectoryProperty = project.objects.directoryProperty()
22+
1823 @InputFile
1924 val sketchMetaData: RegularFileProperty = project.objects.fileProperty()
2025
2126 init {
2227 librariesMetaData.convention(project.layout.buildDirectory.file(" processing/libraries" ))
2328 sketchMetaData.convention(project.layout.buildDirectory.file(" processing/sketch" ))
29+ outputJarsDirectory.convention(project.layout.buildDirectory.dir(" processing/libs" ))
2430 }
2531
2632 @TaskAction
@@ -44,36 +50,21 @@ abstract class DependenciesTask: DefaultTask() {
4450 library.jars.forEach { jar ->
4551 jar.classes.forEach { className ->
4652 if (className.startsWith(statement)) {
47- dependencies.addAll(library.jars.map { it.path } )
53+ dependencies.addAll(library.jars.map { it.path })
4854 return @import
4955 }
5056 }
5157 }
5258 }
5359 }
54- project.dependencies.add(" implementation" , project.files(dependencies) )
55-
56- // TODO: Mutating the dependencies of configuration ':implementation' after it has been resolved or consumed. This
57-
58- // TODO: Add only if user is compiling for P2D or P3D
59- // Add JOGL and Gluegen dependencies
60- project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:jogl-all-main:2.5.0" )
61- project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt:2.5.0" )
62-
63- val os = System .getProperty(" os.name" ).lowercase()
64- val arch = System .getProperty(" os.arch" ).lowercase()
65-
66- val variant = when {
67- os.contains(" mac" ) -> " macosx-universal"
68- os.contains(" win" ) && arch.contains(" 64" ) -> " windows-amd64"
69- os.contains(" linux" ) && arch.contains(" aarch64" ) -> " linux-aarch64"
70- os.contains(" linux" ) && arch.contains(" arm" ) -> " linux-arm"
71- os.contains(" linux" ) && arch.contains(" amd64" ) -> " linux-amd64"
72- else -> throw GradleException (" Unsupported OS/architecture: $os / $arch " )
60+ // Copy discovered jars to the output directory so they can be wired into the
61+ // compilation classpath at configuration time (Gradle 9 forbids mutating
62+ // configurations after they have been observed/resolved).
63+ val outputDir = outputJarsDirectory.get().asFile
64+ outputDir.deleteRecursively()
65+ outputDir.mkdirs()
66+ dependencies.forEach { jar ->
67+ jar.copyTo(outputDir.resolve(jar.name), overwrite = true )
7368 }
74-
75- project.dependencies.add(" runtimeOnly" , " org.jogamp.gluegen:gluegen-rt:2.5.0:natives-$variant " )
76- project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:nativewindow:2.5.0:natives-$variant " )
77- project.dependencies.add(" runtimeOnly" , " org.jogamp.jogl:newt:2.5.0:natives-$variant " )
7869 }
7970}
0 commit comments