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

Work in progress for incremental archival task.

This commit is contained in:
Cedric Beust 2017-03-14 15:52:03 -07:00
parent c056fa5c9f
commit 383128d96b
7 changed files with 65 additions and 12 deletions

View file

@ -0,0 +1,11 @@
package com.beust.kobalt.plugin.packaging
import com.beust.kobalt.api.KobaltContext
import com.beust.kobalt.api.Project
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.misc.IncludedFile
interface ArchiveFileFinder {
fun findIncludedFiles(project: Project, context: KobaltContext, zip: Zip) : List<IncludedFile>
}

View file

@ -4,9 +4,11 @@ import com.beust.kobalt.api.KobaltContext
import com.beust.kobalt.api.Project
import com.beust.kobalt.archive.Archives
import com.beust.kobalt.archive.Jar
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.aether.Scope
import com.beust.kobalt.misc.*
import com.beust.kobalt.plugin.packaging.ArchiveFileFinder
import com.google.inject.Inject
import java.io.File
import java.io.FileInputStream
@ -15,9 +17,10 @@ import java.nio.file.Paths
import java.util.jar.JarOutputStream
import java.util.jar.Manifest
class JarGenerator @Inject constructor(val dependencyManager: DependencyManager) {
class JarGenerator @Inject constructor(val dependencyManager: DependencyManager) : ArchiveFileFinder {
companion object {
fun findIncludedFiles(directory: String, files: List<IncludedFile>, excludes: List<Glob>)
fun findIncludedFiles(directory: String, files: List<IncludedFile>, excludes: List<Glob>,
throwOnError: Boolean = true)
: List<IncludedFile> {
val result = arrayListOf<IncludedFile>()
files.forEach { includedFile ->
@ -27,7 +30,7 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
if (File(directory, fromPath).exists()) {
spec.toFiles(directory, fromPath).forEach { file ->
val fullFile = File(KFiles.joinDir(directory, fromPath, file.path))
if (! fullFile.exists()) {
if (! fullFile.exists() && throwOnError) {
throw AssertionError("File should exist: $fullFile")
}
@ -52,7 +55,7 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
}
}
fun findIncludedFiles(project: Project, context: KobaltContext, jar: Jar) : List<IncludedFile> {
override fun findIncludedFiles(project: Project, context: KobaltContext, jar: Zip) : List<IncludedFile> {
//
// Add all the applicable files for the current project
//
@ -86,7 +89,7 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
//
// The user specified an include, just use it verbatim
//
val includedFiles = findIncludedFiles(project.directory, jar.includedFiles, jar.excludes)
val includedFiles = findIncludedFiles(project.directory, jar.includedFiles, jar.excludes, false)
result.addAll(includedFiles)
}

View file

@ -8,7 +8,7 @@ import com.beust.kobalt.api.annotation.Directive
*/
open class Jar(override val project: Project,
override var name : String = Archives.defaultArchiveName(project) + ".jar",
var fatJar: Boolean = false) : Zip(project, name), AttributeHolder {
override var fatJar: Boolean = false) : Zip(project, name, fatJar), AttributeHolder {
@Directive
fun manifest(init: Manifest.(p: Manifest) -> Unit) : Manifest {
val m = Manifest(this)

View file

@ -8,7 +8,8 @@ import com.beust.kobalt.misc.From
import com.beust.kobalt.misc.IncludedFile
import com.beust.kobalt.misc.To
open class Zip(open val project: Project, open var name: String = Archives.defaultArchiveName(project) + ".zip") {
open class Zip(open val project: Project, open var name: String = Archives.defaultArchiveName(project) + ".zip",
open var fatJar: Boolean = false) {
val excludes = arrayListOf<Glob>()
@Directive

View file

@ -11,7 +11,9 @@ import com.beust.kobalt.internal.IncrementalManager
import com.beust.kobalt.internal.JvmCompilerPlugin
import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.Md5
import com.beust.kobalt.maven.PomGenerator
import com.beust.kobalt.misc.IncludedFile
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.KobaltExecutors
import java.io.File
@ -68,6 +70,34 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
* skipped.
*/
override fun assemble(project: Project, context: KobaltContext) : IncrementalTaskInfo {
val allArchivers = packages.filter { it.project.name == project.name }
if (false) {
// Work in progress
val allIncludedFiles = arrayListOf<IncludedFile>()
val zipToFiles = hashMapOf<String, List<IncludedFile>>()
allArchivers.forEach { packageConfig ->
listOf(packageConfig.jars, packageConfig.wars, packageConfig.zips).forEach { archives ->
archives.forEach {
val files = jarGenerator.findIncludedFiles(packageConfig.project, context, it)
allIncludedFiles.addAll(files)
zipToFiles[it.name] = files
}
}
}
val allFiles = allIncludedFiles.fold(arrayListOf<File>()) { files, includedFile: IncludedFile ->
val foundFiles = includedFile.allFromFiles(project.directory)
val absFiles = foundFiles.map {
File(KFiles.joinDir(project.directory, includedFile.from, it.path))
}
files.addAll(absFiles)
files
}
val md5 = Md5.toMd5Directories(allFiles)
println("MD5 is: " + md5)
}
return IncrementalTaskInfo(
{ null },
{ null },
@ -75,7 +105,7 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
try {
project.projectProperties.put(Archives.JAR_NAME,
context.variant.archiveName(project, null, ".jar"))
packages.filter { it.project.name == project.name }.forEach { packageConfig ->
allArchivers.forEach { packageConfig ->
packageConfig.jars.forEach { jarGenerator.generateJar(packageConfig.project, context, it) }
packageConfig.wars.forEach { warGenerator.generateWar(packageConfig.project, context, it) }
packageConfig.zips.forEach { zipGenerator.generateZip(packageConfig.project, context, it) }

View file

@ -7,6 +7,7 @@ import com.beust.kobalt.api.KobaltContext
import com.beust.kobalt.api.Project
import com.beust.kobalt.archive.Archives
import com.beust.kobalt.archive.War
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.misc.From
@ -19,7 +20,8 @@ import java.io.OutputStream
import java.nio.file.Paths
import java.util.jar.JarOutputStream
class WarGenerator @Inject constructor(val dependencyManager: DependencyManager, val kobaltLog: ParallelLogger) {
class WarGenerator @Inject constructor(val dependencyManager: DependencyManager, val kobaltLog: ParallelLogger)
: ArchiveFileFinder {
companion object {
val WEB_INF = "WEB-INF"
@ -27,7 +29,7 @@ class WarGenerator @Inject constructor(val dependencyManager: DependencyManager,
val LIB = "$WEB_INF/lib"
}
fun findIncludedFiles(project: Project, context: KobaltContext, war: War) : List<IncludedFile> {
override fun findIncludedFiles(project: Project, context: KobaltContext, war: Zip) : List<IncludedFile> {
//
// src/main/web app and classes
//

View file

@ -7,11 +7,17 @@ import com.beust.kobalt.archive.Archives
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.misc.IncludedFile
import com.google.inject.Inject
class ZipGenerator @Inject constructor(val dependencyManager: DependencyManager, val kobaltLog: ParallelLogger) {
class ZipGenerator @Inject constructor(val dependencyManager: DependencyManager, val kobaltLog: ParallelLogger)
: ArchiveFileFinder {
override fun findIncludedFiles(project: Project, context: KobaltContext, zip: Zip): List<IncludedFile> {
return JarGenerator.findIncludedFiles(project.directory, zip.includedFiles, zip.excludes)
}
fun generateZip(project: Project, context: KobaltContext, zip: Zip) {
val allFiles = JarGenerator.findIncludedFiles(project.directory, zip.includedFiles, zip.excludes)
val allFiles = findIncludedFiles(project, context, zip)
Archives.generateArchive(project, context, zip.name, ".zip", allFiles)
}
}