Skip to content

Commit 17acb01

Browse files
committed
Copy running JDK rather than download
1 parent b534c26 commit 17acb01

File tree

6 files changed

+56
-87
lines changed

6 files changed

+56
-87
lines changed

app/build.gradle.kts

Lines changed: 23 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import org.gradle.kotlin.dsl.support.zipTo
2-
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
1+
import org.gradle.internal.jvm.Jvm
32
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
43
import org.jetbrains.compose.desktop.application.tasks.AbstractJPackageTask
54
import org.jetbrains.compose.internal.de.undercouch.gradle.tasks.download.Download
6-
import org.jetbrains.kotlin.fir.scopes.impl.overrides
75
import java.io.FileOutputStream
86
import java.util.zip.ZipEntry
97
import java.util.zip.ZipOutputStream
@@ -335,41 +333,6 @@ tasks.register<Copy>("includeJavaMode") {
335333
into(composeResources("modes/java/mode"))
336334
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
337335
}
338-
tasks.register<Download>("includeJdk") {
339-
val os = DefaultNativePlatform.getCurrentOperatingSystem()
340-
val arch = when (System.getProperty("os.arch")) {
341-
"amd64", "x86_64" -> "x64"
342-
else -> System.getProperty("os.arch")
343-
}
344-
val platform = when {
345-
os.isWindows -> "windows"
346-
os.isMacOsX -> "mac"
347-
else -> "linux"
348-
}
349-
350-
val javaVersion = System.getProperty("java.version").split(".")[0]
351-
val imageType = "jdk"
352-
353-
src("https://api.adoptium.net/v3/binary/latest/" +
354-
"$javaVersion/ga/" +
355-
"$platform/" +
356-
"$arch/" +
357-
"$imageType/" +
358-
"hotspot/normal/eclipse?project=jdk")
359-
360-
val extension = if (os.isWindows) "zip" else "tar.gz"
361-
val jdk = layout.buildDirectory.file("tmp/jdk-$platform-$arch.$extension")
362-
dest(jdk)
363-
overwrite(false)
364-
doLast {
365-
copy {
366-
val archive = if (os.isWindows) { zipTree(jdk) } else { tarTree(jdk) }
367-
from(archive){ eachFile{ permissions{ unix("755") } } }
368-
into(composeResources(""))
369-
}
370-
}
371-
finalizedBy("prepareAppResources")
372-
}
373336
tasks.register<Copy>("includeSharedAssets"){
374337
from("../build/shared/")
375338
into(composeResources(""))
@@ -414,21 +377,26 @@ tasks.register<Copy>("includeJavaModeResources") {
414377
from(java.layout.buildDirectory.dir("resources-bundled"))
415378
into(composeResources("../"))
416379
}
417-
tasks.register<Copy>("renameWindres") {
418-
dependsOn("includeSharedAssets","includeJavaModeResources")
419-
val dir = composeResources("modes/java/application/launch4j/bin/")
420-
val os = DefaultNativePlatform.getCurrentOperatingSystem()
421-
val platform = when {
422-
os.isWindows -> "windows"
423-
os.isMacOsX -> "macos"
424-
else -> "linux"
425-
}
426-
from(dir) {
427-
include("*-$platform*")
428-
rename("(.*)-$platform(.*)", "$1$2")
380+
tasks.register("includeJdk") {
381+
dependsOn("createDistributable")
382+
doFirst {
383+
val jdk = Jvm.current().javaHome.absolutePath
384+
val target = layout.buildDirectory.dir("compose/binaries").get().asFileTree.matching { include("**/include.jdk") }
385+
.files
386+
.firstOrNull()
387+
?.parentFile
388+
?.resolve("jdk")
389+
?.absolutePath
390+
?: error("Could not find include.jdk")
391+
392+
val isWindows = System.getProperty("os.name").lowercase().contains("win")
393+
val command = if (isWindows) {
394+
listOf("xcopy", "/E", "/I", "/Q", jdk, target)
395+
} else {
396+
listOf("cp", "-a", jdk, target)
397+
}
398+
ProcessBuilder(command).inheritIO().start().waitFor()
429399
}
430-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
431-
into(dir)
432400
}
433401
tasks.register("signResources"){
434402
onlyIf {
@@ -440,19 +408,15 @@ tasks.register("signResources"){
440408
dependsOn(
441409
"includeCore",
442410
"includeJavaMode",
443-
"includeJdk",
444411
"includeSharedAssets",
445412
"includeProcessingExamples",
446413
"includeProcessingWebsiteExamples",
447414
"includeJavaModeResources",
448-
"renameWindres"
449415
)
450416
finalizedBy("prepareAppResources")
451417

452418
val resourcesPath = composeResources("")
453419

454-
455-
456420
// find jars in the resources directory
457421
val jars = mutableListOf<File>()
458422
doFirst{
@@ -529,31 +493,11 @@ afterEvaluate {
529493
"includeSharedAssets",
530494
"includeProcessingExamples",
531495
"includeProcessingWebsiteExamples",
532-
"includeJavaModeResources",
533-
"renameWindres"
496+
"includeJavaModeResources"
534497
)
535498
}
536-
tasks.register("setExecutablePermissions") {
537-
description = "Sets executable permissions on binaries in Processing.app resources"
538-
group = "compose desktop"
539-
540-
doLast {
541-
val resourcesPath = layout.buildDirectory.dir("compose/binaries")
542-
fileTree(resourcesPath) {
543-
include("**/resources/**/bin/**")
544-
include("**/resources/**/*.sh")
545-
include("**/resources/**/*.dylib")
546-
include("**/resources/**/*.so")
547-
include("**/resources/**/*.exe")
548-
}.forEach { file ->
549-
if (file.isFile) {
550-
file.setExecutable(true, false)
551-
}
552-
}
553-
}
554-
}
555499
tasks.named("createDistributable").configure {
556-
dependsOn("signResources", "includeJdk")
557-
finalizedBy("setExecutablePermissions")
500+
dependsOn("signResources")
501+
finalizedBy("includeJdk")
558502
}
559503
}

app/src/processing/app/Platform.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,10 @@ static public File getContentFile(String name) {
391391
static public File getJavaHome() {
392392
var resourcesDir = System.getProperty("compose.application.resources.dir");
393393
if(resourcesDir != null) {
394-
var jdkFolder = Arrays.stream(new File(resourcesDir).listFiles((dir, name) -> dir.isDirectory() && name.startsWith("jdk-")))
395-
.findFirst()
396-
.orElse(null);
397-
if(Platform.isMacOS()){
398-
return new File(jdkFolder, "Contents/Home");
394+
var jdkFolder = new File(resourcesDir,"jdk");
395+
if(jdkFolder.exists()){
396+
return jdkFolder;
399397
}
400-
return jdkFolder;
401398
}
402399

403400
var home = System.getProperty("java.home");

app/src/processing/app/gradle/GradleService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import org.gradle.tooling.BuildLauncher
1111
import org.gradle.tooling.GradleConnector
1212
import org.gradle.tooling.ProjectConnection
1313
import org.gradle.tooling.events.ProgressListener
14+
import org.gradle.tooling.events.problems.ProblemEvent
15+
import org.gradle.tooling.events.problems.internal.DefaultSingleProblemEvent
1416
import org.gradle.tooling.events.task.TaskFinishEvent
1517
import org.gradle.tooling.events.task.TaskStartEvent
1618
import processing.app.Base
@@ -30,6 +32,7 @@ class GradleService(val editor: Editor) {
3032
val running = mutableStateOf(false)
3133
var vm: VirtualMachine? = null
3234
val debugPort = (30000..60000).random()
35+
val problems = mutableStateListOf<ProblemEvent>()
3336

3437
private var connection: ProjectConnection? = null
3538
private var preparation: Job? = null
@@ -176,6 +179,9 @@ class GradleService(val editor: Editor) {
176179
if(event is TaskFinishEvent){
177180
finishedTasks.add(name)
178181
}
182+
if(event is DefaultSingleProblemEvent){
183+
Messages.log("")
184+
}
179185
})
180186
return this
181187
}
@@ -255,6 +261,7 @@ class GradleService(val editor: Editor) {
255261
}
256262

257263
return this.newBuild()
264+
// .addJvmArguments("-Xmx2g")
258265
.setJavaHome(Platform.getJavaHome())
259266
.withArguments(
260267
"--init-script", initGradle.toAbsolutePath().toString(),

build/shared/include.jdk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This file is used by gradle to determine where it should copy the jdk

java/build.gradle.kts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
2+
13
plugins {
24
id("java")
35
}
@@ -53,7 +55,7 @@ tasks.register<Copy>("extraResources"){
5355
include("keywords.txt")
5456
include("theme/**/*")
5557
include("application/**/*")
56-
into( layout.buildDirectory.dir("resources-bundled/common/modes/java"))
58+
into(layout.buildDirectory.dir("resources-bundled/common/modes/java"))
5759
}
5860
tasks.register<Copy>("copyCore"){
5961
val coreProject = project(":core")
@@ -64,6 +66,22 @@ tasks.register<Copy>("copyCore"){
6466
rename("core.+\\.jar", "core.jar")
6567
into(coreProject.layout.projectDirectory.dir("library"))
6668
}
69+
tasks.register<Copy>("renameWindres") {
70+
val dir = layout.buildDirectory.dir("resources-bundled/common/modes/java")
71+
val os = DefaultNativePlatform.getCurrentOperatingSystem()
72+
val platform = when {
73+
os.isWindows -> "windows"
74+
os.isMacOsX -> "macos"
75+
else -> "linux"
76+
}
77+
from(dir) {
78+
include("*-$platform*")
79+
rename("(.*)-$platform(.*)", "$1$2")
80+
}
81+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
82+
into(dir)
83+
tasks.named("extraResources"){ dependsOn(this) }
84+
}
6785

6886
val libraries = arrayOf("dxf","io","net","pdf","serial","svg")
6987
libraries.forEach { library ->
@@ -77,7 +95,7 @@ libraries.forEach { library ->
7795
include("*.properties")
7896
include("library/**/*")
7997
include("examples/**/*")
80-
into( layout.buildDirectory.dir("resources-bundled/common/modes/java/libraries/$library"))
98+
into(layout.buildDirectory.dir("resources-bundled/common/modes/java/libraries/$library"))
8199
}
82100
tasks.named("extraResources"){ dependsOn("library-$library-extraResources") }
83101
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ class ProcessingPlugin @Inject constructor(private val objectFactory: ObjectFact
118118
}
119119
}
120120

121+
// TODO: Add support for top level .java files
122+
121123
// Add convenience tasks for running, presenting, and exporting the sketch outside of Processing
122124
if(!isProcessing) {
123125
project.tasks.create("sketch").apply {

0 commit comments

Comments
 (0)