mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-25 07:57:12 -07:00
Merge branch 'master' of github.com:cbeust/kobalt
This commit is contained in:
commit
ae59e1d7ff
12 changed files with 81 additions and 57 deletions
|
@ -1 +1 @@
|
|||
kobalt.version=1.0.90
|
||||
kobalt.version=1.0.92
|
||||
|
|
|
@ -67,7 +67,7 @@ open class Jvm constructor(
|
|||
return toolsJar
|
||||
}
|
||||
if (javaHome!!.name.equals("jre", true)) {
|
||||
javaHome = javaHome!!.parentFile
|
||||
_javaHome = javaHome!!.parentFile
|
||||
toolsJar = File(javaHome, "lib/tools.jar")
|
||||
if (toolsJar.exists()) {
|
||||
return toolsJar
|
||||
|
@ -78,7 +78,7 @@ open class Jvm constructor(
|
|||
val version = SystemProperties.Companion.javaVersion
|
||||
if (javaHome!!.name.toRegex().matches("jre\\d+")
|
||||
|| javaHome!!.name == "jre$version") {
|
||||
javaHome = File(javaHome!!.parentFile, "jdk$version")
|
||||
_javaHome = File(javaHome!!.parentFile, "jdk$version")
|
||||
toolsJar = File(javaHome, "lib/tools.jar")
|
||||
if (toolsJar.exists()) {
|
||||
return toolsJar
|
||||
|
|
|
@ -126,61 +126,62 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null,
|
|||
|
||||
var generatedSourceDirectory: File? = null
|
||||
|
||||
// private fun findBuildTypeBuildConfig(project: Project, variant: Variant?) : BuildConfig? {
|
||||
// val buildTypeName = variant?.buildType?.name
|
||||
// return project.buildTypes[buildTypeName]?.buildConfig
|
||||
// }
|
||||
//
|
||||
// private fun findProductFlavorBuildConfig(project: Project, variant: Variant?) : BuildConfig? {
|
||||
// val buildTypeName = variant?.productFlavor?.name
|
||||
// return project.productFlavors[buildTypeName]?.buildConfig
|
||||
// }
|
||||
private fun findBuildTypeBuildConfig(project: Project, variant: Variant?) : BuildConfig? {
|
||||
val buildTypeName = variant?.buildType?.name
|
||||
return project.buildTypes[buildTypeName]?.buildConfig
|
||||
}
|
||||
|
||||
private fun findProductFlavorBuildConfig(project: Project, variant: Variant?) : BuildConfig? {
|
||||
val buildTypeName = variant?.productFlavor?.name
|
||||
return project.productFlavors[buildTypeName]?.buildConfig
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of the BuildConfigs found on the productFlavor{}, buildType{} and project{} (in that order).
|
||||
*/
|
||||
// private fun findBuildConfigs(project: Project, variant: Variant?) : List<BuildConfig> {
|
||||
// val result = listOf(
|
||||
// findBuildTypeBuildConfig(project, variant),
|
||||
// findProductFlavorBuildConfig(project, variant),
|
||||
// project.buildConfig)
|
||||
// .filterNotNull()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
private fun findBuildConfigs(project: Project, variant: Variant?) : List<BuildConfig> {
|
||||
val result = listOf(
|
||||
findBuildTypeBuildConfig(project, variant),
|
||||
findProductFlavorBuildConfig(project, variant),
|
||||
project.buildConfig)
|
||||
.filterNotNull()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate BuildConfig.java if requested. Also look up if any BuildConfig is defined on the current build type,
|
||||
* product flavor or main project, and use them to generateAndSave any additional field (in that order to
|
||||
* respect the priorities). Return the generated file if it was generated, null otherwise.
|
||||
*/
|
||||
// fun maybeGenerateBuildConfig(project: Project, context: KobaltContext) : File? {
|
||||
// val buildConfigs = findBuildConfigs(project, this)
|
||||
//
|
||||
// if (buildConfigs.size > 0) {
|
||||
// val pkg = project.packageName ?: project.group
|
||||
// ?: throw KobaltException(
|
||||
// "packageName needs to be defined on the project in order to generateAndSave BuildConfig")
|
||||
//
|
||||
// val contributor = ActorUtils.selectAffinityActor(context.pluginInfo.buildConfigContributors, project)
|
||||
// if (contributor != null) {
|
||||
// val code = contributor.generateBuildConfig(project, context, pkg, this, buildConfigs)
|
||||
// val result = KFiles.makeDir(KFiles.generatedSourceDir(project, this, "buildConfig"))
|
||||
// // Make sure the generatedSourceDirectory doesn't contain the project.directory since
|
||||
// // that directory will be added when trying to find recursively all the sources in it
|
||||
// generatedSourceDirectory = result.relativeTo(File(project.directory))
|
||||
// val outputGeneratedSourceDirectory = File(result, pkg.replace('.', File.separatorChar))
|
||||
// val outputDir = File(outputGeneratedSourceDirectory, "BuildConfig." + contributor.buildConfigSuffix)
|
||||
// KFiles.saveFile(outputDir, code)
|
||||
// context.logger.log(project.name, 2, "Generated ${outputDir.path}")
|
||||
// return result
|
||||
// } else {
|
||||
// throw KobaltException("Couldn't find a contributor to generateAndSave BuildConfig")
|
||||
// }
|
||||
// } else {
|
||||
// return null
|
||||
// }
|
||||
// }
|
||||
fun maybeGenerateBuildConfig(project: Project, context: KobaltContext) : File? {
|
||||
val buildConfigs = findBuildConfigs(project, this)
|
||||
|
||||
if (buildConfigs.size > 0) {
|
||||
val pkg = project.packageName ?: project.group
|
||||
?: throw KobaltException(
|
||||
"packageName needs to be defined on the project in order to generateAndSave BuildConfig")
|
||||
|
||||
val contributor = ActorUtils.selectAffinityActor(project, context,
|
||||
context.pluginInfo.buildConfigContributors)
|
||||
if (contributor != null) {
|
||||
val code = contributor.generateBuildConfig(project, context, pkg, this, buildConfigs)
|
||||
val result = KFiles.makeDir(KFiles.generatedSourceDir(project, this, "buildConfig"))
|
||||
// Make sure the generatedSourceDirectory doesn't contain the project.directory since
|
||||
// that directory will be added when trying to find recursively all the sources in it
|
||||
generatedSourceDirectory = result.relativeTo(File(project.directory))
|
||||
val outputGeneratedSourceDirectory = File(result, pkg.replace('.', File.separatorChar))
|
||||
val outputDir = File(outputGeneratedSourceDirectory, "BuildConfig." + contributor.buildConfigSuffix)
|
||||
KFiles.saveFile(outputDir, code)
|
||||
context.logger.log(project.name, 2, "Generated ${outputDir.path}")
|
||||
return result
|
||||
} else {
|
||||
throw KobaltException("Couldn't find a contributor to generateAndSave BuildConfig")
|
||||
}
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
override fun toString() = toTask("")
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import com.beust.kobalt.Variant
|
|||
/**
|
||||
* Plug-ins that can generate a BuildConfig file.
|
||||
*/
|
||||
interface IBuildConfigContributor : ISimpleAffinity<Project> {
|
||||
interface IBuildConfigContributor : IProjectAffinity {
|
||||
fun generateBuildConfig(project: Project, context: KobaltContext, packageName: String, variant: Variant,
|
||||
buildConfigs: List<BuildConfig>) : String
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class Archives {
|
|||
const val JAR_NAME_WITH_MAIN_CLASS = "jarNameWithMainClass"
|
||||
|
||||
fun defaultArchiveName(project: Project) = project.name +
|
||||
if (project.version == null || project.version == "") "" else "-${project.version}"
|
||||
if (project.version.isNullOrBlank()) "" else "-${project.version}"
|
||||
|
||||
fun generateArchive(project: Project,
|
||||
context: KobaltContext,
|
||||
|
|
|
@ -157,6 +157,10 @@ open class JvmCompilerPlugin @Inject constructor(
|
|||
if (compilerContributors.isEmpty()) {
|
||||
throw KobaltException("Couldn't find any compiler for project ${project.name}")
|
||||
} else {
|
||||
|
||||
// Generate BuildConfig if applicable
|
||||
context.variant.maybeGenerateBuildConfig(project, context)
|
||||
|
||||
val allCompilers = compilerContributors.flatMap { it.compilersFor(project, context)}.sorted()
|
||||
|
||||
/**
|
||||
|
|
|
@ -19,6 +19,7 @@ class RunCommandInfo {
|
|||
*/
|
||||
var useErrorStreamAsErrorIndicator : Boolean = true
|
||||
var useInputStreamAsErrorIndicator : Boolean = false
|
||||
var ignoreExitValue : Boolean = false
|
||||
|
||||
var errorCallback: Function1<List<String>, Unit> = NewRunCommand.DEFAULT_ERROR
|
||||
var successCallback: Function1<List<String>, Unit> = NewRunCommand.DEFAULT_SUCCESS
|
||||
|
@ -89,10 +90,14 @@ open class NewRunCommand(val info: RunCommandInfo) {
|
|||
// Check to see if the command succeeded
|
||||
val isSuccess =
|
||||
if (info.containsErrors != null) ! info.containsErrors!!(error)
|
||||
else isSuccess(returnCode, input, error)
|
||||
else isSuccess(if (info.ignoreExitValue) true else returnCode, input, error)
|
||||
|
||||
if (isSuccess) {
|
||||
info.successCallback(input)
|
||||
if (!info.useErrorStreamAsErrorIndicator) {
|
||||
info.successCallback(error + input)
|
||||
} else {
|
||||
info.successCallback(input)
|
||||
}
|
||||
} else {
|
||||
info.errorCallback(error + input)
|
||||
}
|
||||
|
@ -105,7 +110,7 @@ open class NewRunCommand(val info: RunCommandInfo) {
|
|||
* have various ways to signal errors.
|
||||
*/
|
||||
open protected fun isSuccess(isSuccess: Boolean, input: List<String>, error: List<String>) : Boolean {
|
||||
var hasErrors = ! isSuccess
|
||||
var hasErrors: Boolean = ! isSuccess
|
||||
if (info.useErrorStreamAsErrorIndicator && ! hasErrors) {
|
||||
hasErrors = hasErrors || error.isNotEmpty()
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ class Profiles(val context: KobaltContext) {
|
|||
val variable = if (match.first) match.second else oldMatch.second
|
||||
|
||||
if (oldMatch.first) {
|
||||
warn("Old profile syntax detected for \"$line\"," +
|
||||
warn("Old profile syntax detected for \"${line.trim()}\"," +
|
||||
" please update to \"val $variable by profile()\"")
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,15 @@ class ApplicationConfig {
|
|||
@Directive
|
||||
fun args(vararg argv: String) = argv.forEach { args.add(it) }
|
||||
val args = arrayListOf<String>()
|
||||
|
||||
@Directive
|
||||
var ignoreErrorStream: Boolean = false
|
||||
|
||||
@Directive
|
||||
var ignoreInputStream: Boolean = true
|
||||
|
||||
@Directive
|
||||
var ignoreExitValue: Boolean = false
|
||||
}
|
||||
|
||||
@Directive
|
||||
|
@ -147,6 +156,9 @@ class ApplicationPlugin @Inject constructor(val configActor: ConfigsActor<Applic
|
|||
kobaltLog(1, "ERROR")
|
||||
kobaltLog(1, output.joinToString("\n"))
|
||||
}
|
||||
useErrorStreamAsErrorIndicator = !config.ignoreErrorStream
|
||||
useInputStreamAsErrorIndicator = !config.ignoreInputStream
|
||||
ignoreExitValue = config.ignoreExitValue
|
||||
}
|
||||
return TaskResult(exitCode == 0)
|
||||
}
|
||||
|
|
|
@ -239,7 +239,9 @@ class KotlinCompiler @Inject constructor(
|
|||
location: CompilerMessageLocation?) {
|
||||
if (severity.isError) {
|
||||
"Couldn't compile file: ${dump(location, message)}".let { fullMessage ->
|
||||
throw KobaltException(fullMessage)
|
||||
error(fullMessage)
|
||||
val ex = KobaltException(fullMessage)
|
||||
throw ex
|
||||
}
|
||||
} else if (severity == CompilerMessageSeverity.WARNING && KobaltLogger.LOG_LEVEL >= 2) {
|
||||
warn(dump(location, message))
|
||||
|
|
|
@ -105,7 +105,7 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
|
|||
val outputFile = jarGenerator.fullArchiveName(project, context, it.name)
|
||||
outputFiles.add(outputFile)
|
||||
allIncludedFiles.addAll(files)
|
||||
zipToFiles[it.name] = files
|
||||
zipToFiles[outputFile.name] = files
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
kobalt.version=1.0.90
|
||||
kobalt.version=1.0.92
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue