Skip to content

Commit a3493d1

Browse files
committed
Updates to dependency management
1 parent 1907aab commit a3493d1

File tree

3 files changed

+42
-28
lines changed

3 files changed

+42
-28
lines changed

java/gradle/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ tasks.withType<Test>().configureEach {
5151
}
5252

5353
tasks.register("writeVersion") {
54-
// make the version available to the plugin at runtime by writing it to a properties file in the resources directory
5554
doLast {
55+
val version = project.version.toString().takeIf { it != "unspecified" } ?: return@doLast
5656
val file = layout.buildDirectory.file("resources/main/version.properties").get().asFile
5757
file.parentFile.mkdirs()
58-
file.writeText("version=${project.version}")
58+
file.writeText("version=$version")
5959
}
6060
}
6161

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.processing.java.gradle
22

33
import org.gradle.api.DefaultTask
4-
import org.gradle.api.GradleException
4+
import org.gradle.api.file.DirectoryProperty
55
import org.gradle.api.file.RegularFileProperty
66
import org.gradle.api.tasks.InputFile
7+
import org.gradle.api.tasks.OutputDirectory
8+
import org.gradle.api.tasks.OutputFile
79
import org.gradle.api.tasks.TaskAction
810
import java.io.File
911
import 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
}

java/gradle/src/main/kotlin/ProcessingPlugin.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.processing.java.gradle
22

33
import org.gradle.api.Plugin
44
import org.gradle.api.Project
5+
import org.gradle.api.GradleException
56
import org.gradle.api.file.SourceDirectorySet
67
import org.gradle.api.internal.file.DefaultSourceDirectorySet
78
import org.gradle.api.internal.tasks.TaskDependencyFactory
@@ -199,16 +200,38 @@ class ProcessingPlugin @Inject constructor(private val objectFactory: ObjectFact
199200
}
200201

201202
val depsTaskName = sourceSet.getTaskName("addLegacyDependencies", "PDE")
202-
project.tasks.register(depsTaskName, DependenciesTask::class.java){ task ->
203+
val depsTask = project.tasks.register(depsTaskName, DependenciesTask::class.java){ task ->
203204
// Link the output of the libraries task to the dependencies task
204205
task.librariesMetaData.set(librariesScan.get().librariesMetaData)
205206
task.dependsOn(pdeTask, librariesScan)
206207
}
207208

209+
project.dependencies.add("implementation",
210+
project.fileTree(depsTask.flatMap { it.outputJarsDirectory }).builtBy(depsTask))
211+
212+
val os = System.getProperty("os.name").lowercase()
213+
val arch = System.getProperty("os.arch").lowercase()
214+
val variant = when {
215+
os.contains("mac") -> "macosx-universal"
216+
os.contains("win") && arch.contains("64") -> "windows-amd64"
217+
os.contains("linux") && arch.contains("aarch64") -> "linux-aarch64"
218+
os.contains("linux") && arch.contains("arm") -> "linux-arm"
219+
os.contains("linux") && arch.contains("amd64") -> "linux-amd64"
220+
else -> throw GradleException("Unsupported OS/architecture: $os / $arch")
221+
}
222+
project.dependencies.add("runtimeOnly", "org.jogamp.jogl:jogl-all-main:2.5.0")
223+
project.dependencies.add("runtimeOnly", "org.jogamp.gluegen:gluegen-rt:2.5.0")
224+
project.dependencies.add("runtimeOnly", "org.jogamp.gluegen:gluegen-rt:2.5.0:natives-$variant")
225+
project.dependencies.add("runtimeOnly", "org.jogamp.jogl:nativewindow:2.5.0:natives-$variant")
226+
project.dependencies.add("runtimeOnly", "org.jogamp.jogl:newt:2.5.0:natives-$variant")
227+
228+
208229
// Make sure that the PDE tasks runs before the java compilation task
209230
project.tasks.named(sourceSet.compileJavaTaskName) { task ->
210231
task.dependsOn(pdeTaskName, depsTaskName)
211232
}
233+
234+
212235
}
213236
}
214237
abstract class DefaultPDESourceDirectorySet @Inject constructor(

0 commit comments

Comments
 (0)