Browse Source

Remove outdated hack with appResourcesDir and add a verification test.

pull/5292/head
Konstantin Tskhovrebov 8 months ago committed by Konstantin
parent
commit
216cc12559
  1. 82
      gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt
  2. 11
      gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/DesktopApplicationTest.kt
  3. 24
      gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/build.gradle
  4. 27
      gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/settings.gradle
  5. 3
      gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/src/main/kotlin/main.kt

82
gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt

@ -5,34 +5,77 @@ @@ -5,34 +5,77 @@
package org.jetbrains.compose.desktop.application.tasks
import org.gradle.api.file.*
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.file.RegularFile
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.*
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.LocalState
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.process.ExecResult
import org.gradle.work.ChangeType
import org.gradle.work.InputChanges
import org.jetbrains.compose.desktop.application.dsl.FileAssociation
import org.jetbrains.compose.desktop.application.dsl.MacOSSigningSettings
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.compose.desktop.application.internal.*
import org.jetbrains.compose.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.*
import org.jetbrains.compose.desktop.application.internal.files.*
import org.jetbrains.compose.desktop.application.internal.files.MacJarSignFileCopyingProcessor
import org.jetbrains.compose.desktop.application.internal.APP_RESOURCES_DIR
import org.jetbrains.compose.desktop.application.internal.InfoPlistBuilder
import org.jetbrains.compose.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue
import org.jetbrains.compose.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue
import org.jetbrains.compose.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue
import org.jetbrains.compose.desktop.application.internal.JvmRuntimeProperties
import org.jetbrains.compose.desktop.application.internal.MacSigner
import org.jetbrains.compose.desktop.application.internal.MacSignerImpl
import org.jetbrains.compose.desktop.application.internal.NoCertificateSigner
import org.jetbrains.compose.desktop.application.internal.PlistKeys
import org.jetbrains.compose.desktop.application.internal.SKIKO_LIBRARY_PATH
import org.jetbrains.compose.desktop.application.internal.cliArg
import org.jetbrains.compose.desktop.application.internal.files.FileCopyingProcessor
import org.jetbrains.compose.desktop.application.internal.files.MacJarSignFileCopyingProcessor
import org.jetbrains.compose.desktop.application.internal.files.SimpleFileCopyingProcessor
import org.jetbrains.compose.desktop.application.internal.files.copyTo
import org.jetbrains.compose.desktop.application.internal.files.copyZipEntry
import org.jetbrains.compose.desktop.application.internal.files.findOutputFileOrDir
import org.jetbrains.compose.desktop.application.internal.files.isDylibPath
import org.jetbrains.compose.desktop.application.internal.files.isJarFile
import org.jetbrains.compose.desktop.application.internal.files.mangledName
import org.jetbrains.compose.desktop.application.internal.files.normalizedPath
import org.jetbrains.compose.desktop.application.internal.files.transformJar
import org.jetbrains.compose.desktop.application.internal.javaOption
import org.jetbrains.compose.desktop.application.internal.validation.validate
import org.jetbrains.compose.internal.utils.*
import org.jetbrains.compose.internal.utils.OS
import org.jetbrains.compose.internal.utils.clearDirs
import org.jetbrains.compose.internal.utils.currentArch
import org.jetbrains.compose.internal.utils.currentOS
import org.jetbrains.compose.internal.utils.currentTarget
import org.jetbrains.compose.internal.utils.delete
import org.jetbrains.compose.internal.utils.ioFile
import org.jetbrains.compose.internal.utils.ioFileOrNull
import org.jetbrains.compose.internal.utils.mkdirs
import org.jetbrains.compose.internal.utils.notNullProperty
import org.jetbrains.compose.internal.utils.nullableProperty
import org.jetbrains.compose.internal.utils.stacktraceToString
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
import java.io.*
import java.io.File
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.Serializable
import java.nio.file.LinkOption
import java.util.*
import javax.inject.Inject
import kotlin.collections.HashMap
import kotlin.collections.HashSet
import kotlin.collections.ArrayList
import kotlin.io.path.isExecutable
import kotlin.io.path.isRegularFile
@ -326,23 +369,6 @@ abstract class AbstractJPackageTask @Inject constructor( @@ -326,23 +369,6 @@ abstract class AbstractJPackageTask @Inject constructor(
@get:Internal
val appResourcesDir: DirectoryProperty = objects.directoryProperty()
/**
* Gradle runtime verification fails,
* if InputDirectory is not null, but a directory does not exist.
* The directory might not exist, because prepareAppResources task
* does not create output directory if there are no resources.
*
* To work around this, appResourcesDir is used as a real property,
* but it is annotated as @Internal, so it ignored during inputs checking.
* This property is used only for inputs checking.
* It returns appResourcesDir value if the underlying directory exists.
*/
@Suppress("unused")
@get:InputDirectory
@get:Optional
internal val appResourcesDirInputDirHackForVerification: Provider<Directory>
get() = appResourcesDir.map { it.takeIf { it.asFile.exists() } }
@get:Internal
private val libsMappingFile: Provider<RegularFile> = workingDir.map {
it.file("libs-mapping.txt")

11
gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/DesktopApplicationTest.kt

@ -545,6 +545,17 @@ class DesktopApplicationTest : GradlePluginTestBase() { @@ -545,6 +545,17 @@ class DesktopApplicationTest : GradlePluginTestBase() {
}
}
@Test
fun emptyResources() = with(testProject("application/emptyAppResources")) {
gradle(":run").checks {
check.taskSuccessful(":run")
}
gradle(":runDistributable").checks {
check.taskSuccessful(":runDistributable")
}
}
@Test
fun testWixUnzip() {
Assumptions.assumeTrue(currentOS == OS.Windows) { "The test is only relevant for Windows" }

24
gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/build.gradle

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
id "org.jetbrains.kotlin.jvm"
id "org.jetbrains.kotlin.plugin.compose"
id "org.jetbrains.compose"
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib"
implementation compose.desktop.currentOs
}
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageVersion = "1.0.0"
appResourcesRootDir.set(project.layout.projectDirectory.dir("resources"))
}
}
}

27
gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/settings.gradle

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
pluginManagement {
plugins {
id 'org.jetbrains.kotlin.jvm' version 'KOTLIN_VERSION_PLACEHOLDER'
id 'org.jetbrains.kotlin.plugin.compose' version 'KOTLIN_VERSION_PLACEHOLDER'
id 'org.jetbrains.compose' version 'COMPOSE_GRADLE_PLUGIN_VERSION_PLACEHOLDER'
}
repositories {
mavenLocal()
gradlePluginPortal()
mavenCentral()
google()
maven {
url 'https://maven.pkg.jetbrains.space/public/p/compose/dev'
}
}
}
dependencyResolutionManagement {
repositories {
mavenCentral()
google()
maven {
url 'https://maven.pkg.jetbrains.space/public/p/compose/dev'
}
mavenLocal()
}
}
rootProject.name = "simple"

3
gradle-plugins/compose/src/test/test-projects/application/emptyAppResources/src/main/kotlin/main.kt

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
fun main() {
println("main")
}
Loading…
Cancel
Save