diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncludeFromTo.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncludeFromTo.kt index 69b953b3..2b5d450c 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncludeFromTo.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/IncludeFromTo.kt @@ -1,6 +1,7 @@ package com.beust.kobalt import com.beust.kobalt.api.annotation.Directive +import java.io.File /** * Base classes for directives that support install(from,to) (e.g. install{} or jar{}). @@ -18,6 +19,13 @@ open class IncludeFromTo { @Directive fun to(s: String) = To(s) + @Directive + fun copy(from: String, to: To) { + with(File(from)) { + includedFiles.add(IncludedFile(from(parent), to, listOf(IFileSpec.FileSpec(name)))) + } + } + @Directive fun include(vararg files: String) { includedFiles.add(IncludedFile(files.map { IFileSpec.FileSpec(it) })) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt index d5e4b443..0760a0a8 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/KFiles.kt @@ -333,7 +333,13 @@ class KFiles { val result = includedFiles.fold(arrayListOf()) { files, includedFile: IncludedFile -> val foundFiles = includedFile.allFromFiles(project.directory) val absFiles = foundFiles.map { - File(KFiles.joinDir(project.directory, includedFile.from, it.path)) + if (it.isAbsolute) { + it + } else if (File(includedFile.from).isAbsolute) { + File(includedFile.from, it.path) + } else { + File(KFiles.joinDir(project.directory, includedFile.from, it.path)) + } } files.addAll(absFiles) files diff --git a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt index 26a59672..f8dd6c15 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -223,9 +223,10 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana config.includedFiles.forEach { inf -> val target = inf.to val targetFile = File(target) + val files = KFiles.materializeIncludedFiles(project, listOf(inf)) + context.logger.log(project.name, 2, " Deleting target dir $targetFile") targetFile.deleteRecursively() targetFile.mkdirs() - val files = KFiles.materializeIncludedFiles(project, listOf(inf)) files.forEach { context.logger.log(project.name, 1, " Installing $it to $targetFile") KFiles.copyRecursively(it, targetFile, true)