В течение многих лет я неоднократно пытался использовать gradle, и часто сталкиваюсь с одной и той же проблемой при настройке подпроектов.
У меня есть каталог, содержащий несколько проектов msbuild. Они могут иметь или не иметь файл sln
, а если их нет, их нужно просто пропустить. Однако там, где он есть, я пытаюсь настроить плагин msbuild. Я перепробовал 30 различных комбинаций и прочитал по всему inte rnet. Все, что мне нужно сделать, - это настроить msbuild
в подпроекте и сообщить ему, где находится файл решения. И независимо от того, что я пытаюсь, gradle говорит мне, что у меня есть неизвестные символы.
Я знаю плагин применяется на основе некоторой отладки.
Может кто-нибудь объяснить, как их настроить?
в settings.gradle.kts
rootProject.name = File(".").canonicalFile.name
File(".").let{
start -> start.walkTopDown().filter { it.extension == "sln" }.map { it.path.split("/")[1] } }.forEach { include(it)
}
in build.gradle.kts
subprojects {
apply(plugin = "com.ullink.msbuild")
apply(plugin = "com.ullink.nuget")
tasks.register("hello") {
doLast {
println("I'm ${this.project.name}")
}
}
msbuild {
solutionFile = this.buildDir.walkTopDown().find { it.extension == "sln" }
projectName = project.name
verbosity = "normal"
targets = listOf("Clean", "Rebuild")
configuration = "Release"
}
tasks.findByName("msbuild")?.let{
// this outputs
it.javaClass.declaredMethods.map{ it.name }.forEach { println(it) }
}
}
Вот ошибки:
Line 15: msbuild {
^ Unresolved reference: msbuild
Line 16: solutionFile = this.buildDir.walkTopDown().find { it.extension == "sln" }
^ Unresolved reference: solutionFile
Line 17: projectName = project.name
^ Unresolved reference: projectName
Line 18: verbosity = "normal"
^ Unresolved reference: verbosity
Line 19: targets = listOf("Clean", "Rebuild")
^ Unresolved reference: targets
Line 20: configuration = "Release"
^ Unresolved reference: configuration
**
**
С тех пор я преобразовал скрипт сборки в groovy, и, как я и подозревал, это потому, что kotlin довольно строг. Приведенный ниже скрипт работает, хотя мне не нравится, когда файл решения находит код. Если бы кто-то мог объяснить, как сделать эту работу в Kotlin, это было бы горячо
plugins {
id "com.ullink.msbuild" version "3.8" apply(false)
id "com.ullink.nuget" version "2.20" apply(false)
}
subprojects{
apply plugin: 'com.ullink.msbuild'
apply plugin: 'com.ullink.nuget'
msbuild{
solutionFile = {
def result
this.project.projectDir.traverse(type: groovy.io.FileType.FILES, nameFilter: ~/.*\.sln/) {result = it}
result
}()
projectName = project.name
verbosity = "normal"
targets = ["Clean", "Rebuild"]
configuration = "Release"
}
}
Результаты:
$ gradle msbuild
> Task :workflowadaptor-cwi_fl_lake_ui:msbuild
Build started 4/27/2020 1:36:27 PM.
Project "/Users/cbongiorno/dev/xx/prism/PRISM-WFAdaptors/workflowadaptor-cwi_ri_statewide_ui/CWI_RI_STATEWIDE_UISol/CWI_RI_STATEWIDE_UISol.sln" on node 1 (Clean;Rebuild target(s)).
ValidateSolutionConfiguration:
Building solution configuration "Release|Any CPU".
Project "/Users/cbongiorno/dev/xx/prism/PRISM-WFAdaptors/workflowadaptor-cwi_ri_statewide_ui/CWI_RI_STATEWIDE_UISol/CWI_RI_STATEWIDE_UISol.sln" (1) is building "/Users/cbongiorno/dev/xx/prism/PRISM-WFAdaptors/workflowadaptor-cwi_ri_statewide_ui/CWI_RI_STATEWIDE_UISol/PRISM.WFAdaptor.CWI.RI.STATEWIDE.UI/PRISM.WFAdaptor.CWI.RI.STATEWIDE.UI.csproj" (2) on node 1 (Clean target(s)).
CoreClean:
Я нашел правильный синтаксис здесь : И Gradle перестает жаловаться, но теперь он не настраивает задачу, как это делал предыдущий скрипт groovy. В нем говорится, что файл решения не существует - и я уверен, что он есть, но я даже не могу заставить его напечатать debug
plugins {
id("com.ullink.msbuild") version "3.8" apply false
id("com.ullink.nuget") version "2.20" apply false
}
subprojects {
apply(plugin = "com.ullink.msbuild")
apply(plugin = "com.ullink.nuget")
tasks.existing(com.ullink.Msbuild::class){
doFirst{
println("solution is ${solutionFile}")
}
dependsOn("nugetRestore")
solutionFile = this.project.projectDir.walkTopDown().find { it.extension == "sln" }
projectName = project.name
verbosity = "normal"
targets = listOf("Clean", "Rebuild")
configuration = "Release"
}
}