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

Switched to Pom2.

This commit is contained in:
Cedric Beust 2016-03-22 14:42:30 +04:00
parent 0b84938a3f
commit 6a489d0e7e
4 changed files with 77 additions and 21 deletions

View file

@ -79,7 +79,7 @@ class MavenId private constructor(val groupId: String, val artifactId: String, v
fun toId(groupId: String, artifactId: String, packaging: String? = null, version: String?) = fun toId(groupId: String, artifactId: String, packaging: String? = null, version: String?) =
"$groupId:$artifactId:$version" + "$groupId:$artifactId:$version" +
(if (packaging != null) "@$packaging" else "") (if (packaging != null && packaging != "") "@$packaging" else "")
} }

View file

@ -1,18 +1,34 @@
package com.beust.kobalt.maven package com.beust.kobalt.maven
import org.w3c.dom.Element import org.w3c.dom.Element
import org.xml.sax.InputSource
import java.io.File import java.io.File
import java.io.FileReader
import javax.xml.bind.JAXBContext import javax.xml.bind.JAXBContext
import javax.xml.bind.annotation.XmlAnyElement import javax.xml.bind.annotation.XmlAnyElement
import javax.xml.bind.annotation.XmlElement import javax.xml.bind.annotation.XmlElement
import javax.xml.bind.annotation.XmlRootElement import javax.xml.bind.annotation.XmlRootElement
import javax.xml.parsers.SAXParserFactory
import javax.xml.transform.sax.SAXSource
@XmlRootElement(name = "project") @XmlRootElement(name = "project")
class PomProject { class PomProject {
var modelVersion: String? = null var modelVersion: String? = null
var groupId: String? = null var groupId: String? = null
get() {
if (field != null && field!!.contains("\${")) {
println("VARIABLE GROUP")
}
return field
}
var artifactId: String? = null var artifactId: String? = null
var version: String? = null var version: String? = null
get() {
if (field != null && field!!.contains("\${")) {
println("VARIABLE VERSION")
}
return field
}
var name: String? = null var name: String? = null
var description: String? = null var description: String? = null
var url: String? = null var url: String? = null
@ -22,7 +38,13 @@ class PomProject {
var scm: Scm? = null var scm: Scm? = null
var properties: Properties? = null var properties: Properties? = null
var parent: Parent? = null var parent: Parent? = null
var dependencies: Dependencies? = null @XmlElement(name = "dependencies") @JvmField
var pomDependencies: Dependencies? = null
val dependencies: List<Dependency>
get() =
if (pomDependencies != null) pomDependencies!!.dependencies
else emptyList<Dependency>()
var pluginRepositories: PluginRepositories? = null var pluginRepositories: PluginRepositories? = null
val propertyMap = hashMapOf<String, String>() val propertyMap = hashMapOf<String, String>()
@ -37,19 +59,23 @@ class PomProject {
} }
fun main(argv: Array<String>) { fun main(argv: Array<String>) {
Pom2().read("/Users/beust/t/pom.xml") val p = Pom2(File("/Users/beust/t/pom.xml"))
val pom = p.pom
println("Dependencies: " + pom.dependencies[0])
} }
class Pom2 { class Pom2(val documentFile: File) {
fun read(s: String) { val pom: PomProject by lazy {
val ins = File(s).inputStream() val ins = documentFile.inputStream()
val jaxbContext = JAXBContext.newInstance(PomProject::class.java) val jaxbContext = JAXBContext.newInstance(PomProject::class.java)
val pom = jaxbContext.createUnmarshaller().unmarshal(ins) as PomProject val unmarshaller = jaxbContext.createUnmarshaller()
println("License: " + pom.licenses?.licenses!![0].name)
println("Developer: " + pom.developers?.developers!![0].name) val sax = SAXParserFactory.newInstance()
println("Scm: " + pom.scm?.connection) sax.isNamespaceAware = false
println("Properties: " + pom.propertyValue("kotlin.version")) val reader = sax.newSAXParser().xmlReader
println("Plugin repositories: " + pom.pluginRepositories?.pluginRepository!![0]) val er = SAXSource(reader, InputSource(FileReader(documentFile)))
unmarshaller.unmarshal(er) as PomProject
} }
} }
@ -96,11 +122,36 @@ class Dependencies {
} }
class Dependency { class Dependency {
var groupId: String? = null var groupId: String = ""
var artifactId: String? = null fun groupId(pom: Pom2) : String = expandVariable(groupId, pom)
var version: String? = null
var scope: String? = null var artifactId: String = ""
var packaging: String? = null fun artifactId(pom: Pom2) : String = expandVariable(artifactId, pom)
var version: String = ""
fun version(pom: Pom2) : String = expandVariable(version, pom)
var optional: String = "false"
var scope: String = ""
var packaging: String = ""
val id: String = "$groupId:$artifactId:$version"
val mustDownload: Boolean
get() = ! optional.toBoolean() && "provided" != scope && "test" != scope
val isValid : Boolean get() = ! isVariable(groupId) && ! isVariable(artifactId) && ! isVariable(version)
private fun isVariable(s: String) = s.startsWith("\${") && s.endsWith("}")
private fun expandVariable(s: String, pom: Pom2) : String {
if (isVariable(s)) {
println("Expanding variable $s")
return s
} else {
return s
}
}
} }
class Scm { class Scm {

View file

@ -91,7 +91,7 @@ class RepoFinderCallable @Inject constructor(@Assisted val id: String,
File(localRepo.toFullPath(depPomFile)).let { pomFile -> File(localRepo.toFullPath(depPomFile)).let { pomFile ->
pomFile.parentFile.mkdirs() pomFile.parentFile.mkdirs()
Kurl(HostConfig(url)).toFile(pomFile) Kurl(HostConfig(url)).toFile(pomFile)
val dependencies = pomFactory.create(id, pomFile).dependencies val dependencies = Pom2(pomFile).pom.dependencies
val result = arrayListOf<RepoFinder.RepoResult>() val result = arrayListOf<RepoFinder.RepoResult>()
dependencies.map { it.id }.forEach { dependencies.map { it.id }.forEach {
result.addAll(RepoFinderCallable(it, repo, localRepo, pomFactory).call()) result.addAll(RepoFinderCallable(it, repo, localRepo, pomFactory).call())

View file

@ -7,6 +7,7 @@ import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.maven.* import com.beust.kobalt.maven.*
import com.beust.kobalt.misc.DependencyExecutor import com.beust.kobalt.misc.DependencyExecutor
import com.beust.kobalt.misc.Versions import com.beust.kobalt.misc.Versions
import com.beust.kobalt.misc.log
import com.beust.kobalt.misc.warn import com.beust.kobalt.misc.warn
import com.google.inject.Key import com.google.inject.Key
import com.google.inject.assistedinject.Assisted import com.google.inject.assistedinject.Assisted
@ -120,11 +121,15 @@ class MavenDependency @Inject constructor(
override fun directDependencies() : List<IClasspathDependency> { override fun directDependencies() : List<IClasspathDependency> {
val result = arrayListOf<IClasspathDependency>() val result = arrayListOf<IClasspathDependency>()
try { try {
val pom = pomFactory.create(id, pomFile.get()) val pom = Pom2(pomFile.get())
pom.dependencies.filter { pom.pom.dependencies.filter {
it.mustDownload it.mustDownload
}.forEach { }.forEach {
result.add(create(MavenId.toId(it.groupId, it.artifactId, it.packaging, it.version))) if (it.isValid) {
result.add(create(MavenId.toId(it.groupId(pom), it.artifactId(pom), it.packaging, it.version(pom))))
} else {
log(2, "Skipping invalid id: ${it.id}")
}
} }
} catch(ex: Exception) { } catch(ex: Exception) {
warn("Exception when trying to resolve dependencies for $id: " + ex.message) warn("Exception when trying to resolve dependencies for $id: " + ex.message)