From ef516cd9191c69f2d971b417f02af2d406b54d6e Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 7 Jul 2016 19:05:39 -0700 Subject: [PATCH] Implement localMaven(). --- .../kotlin/com/beust/kobalt/BuildScript.kt | 4 ++ .../kobalt/internal/JvmCompilerPlugin.kt | 2 +- .../kobalt/internal/KobaltSettingsXml.kt | 10 ++++- .../kobalt/plugin/publish/PublishPlugin.kt | 42 +++++++++++++++++-- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BuildScript.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BuildScript.kt index dee21377..a6f756ca 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BuildScript.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/BuildScript.kt @@ -3,6 +3,7 @@ package com.beust.kobalt import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.api.Kobalt import com.beust.kobalt.api.annotation.Directive +import com.beust.kobalt.internal.KobaltSettings import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.dependency.FileDependency import org.eclipse.aether.repository.Proxy @@ -72,3 +73,6 @@ fun authRepo(init: HostConfig.() -> Unit) = HostConfig().apply { init() } @Directive fun glob(g: String) : IFileSpec.GlobSpec = IFileSpec.GlobSpec(g) + +@Directive +fun localMaven() = file(Kobalt.INJECTOR.getInstance(KobaltSettings::class.java).localMavenRepo.path) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 5a9d0343..a4dcc0d5 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -92,7 +92,7 @@ open class JvmCompilerPlugin @Inject constructor( return testContributor.run(project, context, configName, dependencyManager.testDependencies(project, context)) } else { - log(1, "Couldn't find a test runner for project ${project.name}, did you specify a dependenciesTest{}?") + log(2, "Couldn't find a test runner for project ${project.name}, did you specify dependenciesTest{}?") return TaskResult() } } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltSettingsXml.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltSettingsXml.kt index 0be160de..8991abbf 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltSettingsXml.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/KobaltSettingsXml.kt @@ -20,6 +20,9 @@ class KobaltSettingsXml { @XmlElement(name = "local-repo") @JvmField var localRepo: String = homeDir(KFiles.KOBALT_DOT_DIR, "repository") + @XmlElement(name = "local-maven-repo") @JvmField + var localMavenRepo: String = homeDir(KFiles.KOBALT_DOT_DIR, "localMavenRepo") + @XmlElement(name = "default-repos") @JvmField var defaultRepos: DefaultReposXml? = null @@ -65,10 +68,15 @@ fun List.getProxy(protocol:String) = find { it.type==protocol } @Singleton class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) { /** - * Location of the local repo. + * Location of the cache repository. */ var localRepo = KFiles.makeDir(xmlFile.localRepo) // var for testing + /** + * Location of the local Maven repo for the task deployToLocalMaven + */ + val localMavenRepo = KFiles.makeDir(xmlFile.localMavenRepo) + val defaultRepos = xmlFile.defaultRepos?.repo val proxyConfigs = with(xmlFile.proxies?.proxy) { diff --git a/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt index f4f7553c..d1aaba14 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/publish/PublishPlugin.kt @@ -7,17 +7,21 @@ import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.internal.DocUrl +import com.beust.kobalt.internal.KobaltSettings +import com.beust.kobalt.maven.Md5 import com.beust.kobalt.maven.PomGenerator import com.beust.kobalt.misc.* import java.io.File +import java.nio.file.Paths +import java.nio.file.StandardCopyOption import javax.inject.Inject import javax.inject.Singleton @Suppress("VARIABLE_WITH_REDUNDANT_INITIALIZER") @Singleton public class PublishPlugin @Inject constructor(val files: KFiles, val factory: PomGenerator.IFactory, - val bintrayFactory: BintrayApi.IFactory, val github: GithubApi2, val localProperties: LocalProperties) - : BasePlugin() { + val bintrayFactory: BintrayApi.IFactory, val github: GithubApi2, val localProperties: LocalProperties, + val settings: KobaltSettings) : BasePlugin() { override val name = PLUGIN_NAME @@ -46,7 +50,7 @@ public class PublishPlugin @Inject constructor(val files: KFiles, val factory: P requireNotNull(project.artifactId, { "Project $project should have a artifactId" }) } - private val VALID = arrayListOf(".jar", ".pom") + private val VALID = listOf(".jar", ".pom") private fun findArtifactFiles(project: Project) : List { val result = files.findRecursively(File(project.directory, project.buildDirectory)) { file -> @@ -55,6 +59,38 @@ public class PublishPlugin @Inject constructor(val files: KFiles, val factory: P return result } + @Task(name = "deployToMavenLocal", description = "Deploy the artifact to Maven local", + dependsOn = arrayOf(TASK_GENERATE_POM, "assemble")) + fun taskDeployToMavenLocal(project: Project): TaskResult { + validateProject(project) + return deployToMavenLocal(project) + } + + private fun deployToMavenLocal(project: Project) : TaskResult { + val files = findArtifactFiles(project) + val allFiles = arrayListOf() + // Calculate an MD5 checksum for each file + files.forEach { + allFiles.add(it) + Md5.toMd5(it).let { md5 -> + val md5File = File(it.path + ".md5") + md5File.writeText(md5) + allFiles.add(md5File) + } + } + + log(2, "Deploying to local maven " + settings.localMavenRepo) + val groupDir = project.group!!.replace('.', File.separatorChar) + val targetDir = KFiles.makeDir(KFiles.joinDir(settings.localMavenRepo.path, groupDir, + project.artifactId!!, project.version!!)) + allFiles.forEach { file -> + log(1, " $file") + KFiles.copy(Paths.get(file.absolutePath), Paths.get(targetDir.path, file.name), + StandardCopyOption.REPLACE_EXISTING) + } + return TaskResult() + } + @Task(name = TASK_UPLOAD_BINTRAY, description = "Upload files to Bintray", dependsOn = arrayOf(TASK_GENERATE_POM, "assemble")) fun taskUploadBintray(project: Project): TaskResult {