1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 16:28: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.api.Project
import com.beust.kobalt.archive.Archives import com.beust.kobalt.archive.Archives
import com.beust.kobalt.archive.Jar import com.beust.kobalt.archive.Jar
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.aether.Scope import com.beust.kobalt.maven.aether.Scope
import com.beust.kobalt.misc.* import com.beust.kobalt.misc.*
import com.beust.kobalt.plugin.packaging.ArchiveFileFinder
import com.google.inject.Inject import com.google.inject.Inject
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
@ -15,9 +17,10 @@ import java.nio.file.Paths
import java.util.jar.JarOutputStream import java.util.jar.JarOutputStream
import java.util.jar.Manifest import java.util.jar.Manifest
class JarGenerator @Inject constructor(val dependencyManager: DependencyManager) { class JarGenerator @Inject constructor(val dependencyManager: DependencyManager) : ArchiveFileFinder {
companion object { 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> { : List<IncludedFile> {
val result = arrayListOf<IncludedFile>() val result = arrayListOf<IncludedFile>()
files.forEach { includedFile -> files.forEach { includedFile ->
@ -27,7 +30,7 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
if (File(directory, fromPath).exists()) { if (File(directory, fromPath).exists()) {
spec.toFiles(directory, fromPath).forEach { file -> spec.toFiles(directory, fromPath).forEach { file ->
val fullFile = File(KFiles.joinDir(directory, fromPath, file.path)) val fullFile = File(KFiles.joinDir(directory, fromPath, file.path))
if (! fullFile.exists()) { if (! fullFile.exists() && throwOnError) {
throw AssertionError("File should exist: $fullFile") 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 // 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 // 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) result.addAll(includedFiles)
} }

View file

@ -8,7 +8,7 @@ import com.beust.kobalt.api.annotation.Directive
*/ */
open class Jar(override val project: Project, open class Jar(override val project: Project,
override var name : String = Archives.defaultArchiveName(project) + ".jar", 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 @Directive
fun manifest(init: Manifest.(p: Manifest) -> Unit) : Manifest { fun manifest(init: Manifest.(p: Manifest) -> Unit) : Manifest {
val m = Manifest(this) 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.IncludedFile
import com.beust.kobalt.misc.To 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>() val excludes = arrayListOf<Glob>()
@Directive @Directive

View file

@ -11,7 +11,9 @@ import com.beust.kobalt.internal.IncrementalManager
import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.internal.JvmCompilerPlugin
import com.beust.kobalt.internal.ParallelLogger import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.Md5
import com.beust.kobalt.maven.PomGenerator import com.beust.kobalt.maven.PomGenerator
import com.beust.kobalt.misc.IncludedFile
import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.KobaltExecutors
import java.io.File import java.io.File
@ -68,6 +70,34 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
* skipped. * skipped.
*/ */
override fun assemble(project: Project, context: KobaltContext) : IncrementalTaskInfo { 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( return IncrementalTaskInfo(
{ null }, { null },
{ null }, { null },
@ -75,7 +105,7 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
try { try {
project.projectProperties.put(Archives.JAR_NAME, project.projectProperties.put(Archives.JAR_NAME,
context.variant.archiveName(project, null, ".jar")) 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.jars.forEach { jarGenerator.generateJar(packageConfig.project, context, it) }
packageConfig.wars.forEach { warGenerator.generateWar(packageConfig.project, context, it) } packageConfig.wars.forEach { warGenerator.generateWar(packageConfig.project, context, it) }
packageConfig.zips.forEach { zipGenerator.generateZip(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.api.Project
import com.beust.kobalt.archive.Archives import com.beust.kobalt.archive.Archives
import com.beust.kobalt.archive.War import com.beust.kobalt.archive.War
import com.beust.kobalt.archive.Zip
import com.beust.kobalt.internal.ParallelLogger import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.misc.From import com.beust.kobalt.misc.From
@ -19,7 +20,8 @@ import java.io.OutputStream
import java.nio.file.Paths import java.nio.file.Paths
import java.util.jar.JarOutputStream 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 { companion object {
val WEB_INF = "WEB-INF" val WEB_INF = "WEB-INF"
@ -27,7 +29,7 @@ class WarGenerator @Inject constructor(val dependencyManager: DependencyManager,
val LIB = "$WEB_INF/lib" 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 // 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.archive.Zip
import com.beust.kobalt.internal.ParallelLogger import com.beust.kobalt.internal.ParallelLogger
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.misc.IncludedFile
import com.google.inject.Inject 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) { 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) Archives.generateArchive(project, context, zip.name, ".zip", allFiles)
} }
} }