1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-27 00:38:11 -07:00

Generating .idea/libraries.

This commit is contained in:
Cedric Beust 2016-02-23 00:49:51 +04:00
parent 61ad74f6ee
commit 2de101cfe7
2 changed files with 90 additions and 2 deletions

View file

@ -0,0 +1,84 @@
package com.beust.kobalt.app
import com.beust.kobalt.Args
import com.beust.kobalt.api.ITemplate
import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.app.remote.DependencyData
import com.beust.kobalt.homeDir
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.log
import com.beust.kobalt.plugin.KobaltPlugin
import com.google.inject.Inject
import java.io.File
/**
* A template that generates IDEA files.
*/
class IdeaFilesTemplate @Inject constructor() : ITemplate {
override val templateName = "idea"
override val templateDescription = "Generate files required by IDEA to build the project"
override val pluginName = KobaltPlugin.PLUGIN_NAME
override fun generateTemplate(args: Args, classLoader: ClassLoader) {
val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java)
val data = dependencyData.dependenciesDataFor(homeDir("kotlin/kobalt/kobalt/src/Build.kt"), args)
val outputDir = KFiles.makeDir(homeDir("t/idea"))
generateLibraries(data, outputDir)
println("Generating ideaFiles")
}
private fun generateLibraries(data: DependencyData.GetDependenciesData, outputDir: File) {
data.projects.forEach {
generateLibrary(it.name, it.compileDependencies, " (Compile)", outputDir)
generateLibrary(it.name, it.testDependencies, " (Test)", outputDir)
}
val kobaltDd = DependencyData.DependencyData("kobalt", "compile",
KFiles.joinDir(KFiles.distributionsDir, Kobalt.version, "kobalt", "wrapper",
"kobalt-${Kobalt.version}.jar"))
generateLibrary("kobalt.jar", listOf(kobaltDd), "", outputDir)
}
private fun generateLibrary(name: String, compileDependencies: List<DependencyData.DependencyData>,
suffix: String, outputDir: File) {
val libraryName = name + suffix
log(1, "Generating libraries for $name$suffix")
val librariesOutputDir = KFiles.makeDir(outputDir.path, "libraries")
with(arrayListOf<String>()) {
add("<component name=\"libraryTable\">")
add(" <library name=\"$libraryName\">")
addAll(generateList(compileDependencies, "CLASSES"))
addAll(generateList(emptyList(), "JAVADOC"))
addAll(generateList(emptyList(), "SOURCES"))
add(" </library>")
add("</component>")
val fileName = libraryName.replace(" ", "_").replace("-", "_").replace("(", "_").replace(")", "_")
.replace(".", "_")
val file = File(librariesOutputDir, fileName + ".xml")
file.writeText(joinToString("\n"))
}
}
private fun generateList(libraries: List<DependencyData.DependencyData>, tag: String) : List<String> {
if (libraries.isEmpty()){
return listOf(" <$tag />")
} else {
val result = arrayListOf<String>()
result.add(" <$tag>")
libraries.forEach {
val path =
if (it.path.contains(".kobalt")) {
val ind = it.path.indexOf(".kobalt")
"\$USER_HOME$/" + it.path.substring(ind)
} else {
it.path
}
result.add(" <root url=\"jar://$path!/\" />")
}
result.add(" </$tag>")
return result
}
}
}

View file

@ -4,12 +4,16 @@ import com.beust.kobalt.api.ITemplate
import com.beust.kobalt.api.ITemplateContributor import com.beust.kobalt.api.ITemplateContributor
import com.beust.kobalt.app.java.JavaBuildGenerator import com.beust.kobalt.app.java.JavaBuildGenerator
import com.beust.kobalt.app.kotlin.KotlinBuildGenerator import com.beust.kobalt.app.kotlin.KotlinBuildGenerator
import com.beust.kobalt.app.remote.DependencyData
import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.PluginInfo
import com.beust.kobalt.misc.log import com.beust.kobalt.misc.log
import com.google.common.collect.ArrayListMultimap import com.google.common.collect.ArrayListMultimap
import com.google.inject.Inject
class Templates : ITemplateContributor { class Templates @Inject constructor() : ITemplateContributor {
override val templates = listOf(JavaBuildGenerator(), KotlinBuildGenerator()) override val templates = listOf(JavaBuildGenerator(), KotlinBuildGenerator(),
//IdeaFilesTemplate()
)
fun list(pluginInfo: PluginInfo) { fun list(pluginInfo: PluginInfo) {
val map = ArrayListMultimap.create<String, ITemplate>() val map = ArrayListMultimap.create<String, ITemplate>()