dépendance gradle non exécutée
Ma situation est la suivante:
- avant de pouvoir empaqueter cette application, je dois extraire une dépendance commune
- Je le tire une fois dans le répertoire racine, puis je le copie dans le sous-projet pour plus de vitesse
- Je dois ensuite construire
- déposer un artefact de construction dans ce répertoire copié
Ainsi, lorsque j'exécute cet exemple de tâche, il extrait la dépendance dans le dossier racine mais ne la copie jamais et je ne vois tout simplement pas pourquoi. Ci-dessous ma version de kotlin coupée
import com.ullink.Msbuild
import java.io.File
plugins {
id("com.ullink.msbuild") version "3.8" apply false
}
subprojects {
apply(plugin = "com.ullink.msbuild")
val solution = projectDir.walkTopDown().find { it.extension == "sln" }!!
tasks {
val restore by register("restore", Exec::class) {
executable = "nuget"
args = listOf(
"restore", solution.canonicalPath,
"-Source",
(getenv("NUGET_SOURCE") ?: project.properties["package.sources"]) as String
)
}
val msbuild by named<Msbuild>("msbuild") {
dependsOn(restore)
solutionFile = solution
projectName = project.name
verbosity = "quiet"
targets = listOf("Clean", "Rebuild")
configuration = "Release"
}
val cpfms by register<Copy>("cpFms"){
dependsOn(rootProject.tasks.named("pullfms"))
doLast{
println("cpFms do last")
val from = projectDir
.listFiles()
.find{ it.isDirectory() && it.name.toLowerCase().startsWith("prism.core.fulfillmentmicroservice") }!!
println("making copy ${from} -> ${projectDir}")
from(from)
into(projectDir)
}
}
val build by named("build") {
dependsOn(msbuild)
}
val cpdll by register<Copy>("cpFmsdll") {
dependsOn(cpfms,build)
doLast{
println("cpFmsdll do last")
val from = projectDir.walkTopDown().find{ it.name == "PRISMDataAdaptor.dll" }!!
val to = projectDir.listFiles().find{ it.isDirectory() && it.name.toLowerCase().startsWith("prism.core.fulfillmentmicroservice") }!!
println("cp dll ${from} -> ${to}")
from(from)
into(to)
}
}
}
}
tasks{
val pullFms by register("pullfms", Exec::class) {
args = listOf(
"install", "PRISM.Core.FulfillmentMicroService",
"-Source", (getenv("NUGET_PUBLISH") ?: project.properties["publish.repo"]) as String
)
executable = "nuget"
}
}
alors quand je cours gradle :adaptor-cwi_ky_statewide_smd:cpFmsdll
J'espère que ça va
- extraire ma dépendance telle que définie dans le projet racine
- copiez-le dans le projet local
- construire
- copiez la DLL de construction dans le dossier à l'étape 2
La course à sec montre ce à quoi je m'attendais:
PS C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors> gradle --dry-run :adaptor-cwi_ky_statewide_smd:cpFmsdll
:adaptor-cwi_ky_statewide_smd:assemble SKIPPED
:adaptor-cwi_ky_statewide_smd:check SKIPPED
:adaptor-cwi_ky_statewide_smd:restore SKIPPED
:adaptor-cwi_ky_statewide_smd:msbuild SKIPPED
:adaptor-cwi_ky_statewide_smd:build SKIPPED
:pullfms SKIPPED
:adaptor-cwi_ky_statewide_smd:cpFms SKIPPED
:adaptor-cwi_ky_statewide_smd:cpFmsdll SKIPPED
mais l'exécution ne le fait pas réellement?! Le directement n'est pas copié dans le projet local mais il est dans le projet racine
PS C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors> gradle :adaptor-cwi_ky_statewide_smd:cpFmsdll
> Task :adaptor-cwi_ky_statewide_smd:restore
MSBuild auto-detection: using msbuild version '15.5.180.51428' from 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\bin'.
All packages listed in packages.config are already installed.
> Task :pullfms
Feeds used:
https://repo.dev.backgroundcheck.com/nexus/repository/nuget-group/
Installing package 'PRISM.Core.FulfillmentMicroService' to 'C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors'.
CACHE https://repo.dev.backgroundcheck.com/nexus/repository/nuget-group/FindPackagesById()?id='PRISM.Core.FulfillmentMicroService'&semVerLevel=2.0.0
Package "PRISM.Core.FulfillmentMicroService.0.0.77" is already installed.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 6s
3 actionable tasks: 3 executed
PS C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors> ls | select -Last 20
Directory: C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/14/2020 10:08 PM gradle
d----- 7/21/2020 3:36 PM infra
d----- 5/13/2020 4:17 AM PRISM-Adaptor-QC_LA_SaintBernard
d----- 8/25/2020 4:25 PM PRISM.Core.FulfillmentMicroService.0.0.77
d----- 7/14/2020 8:07 AM routeadaptor-apinationwide_msmj1_dre
d----- 5/13/2020 4:18 AM serviceadaptor-cwi_ky_statewide_smd
d----- 5/13/2020 4:18 AM serviceadaptor-cwi_ny_statewide
d----- 5/13/2020 4:18 AM serviceadaptor-qc_ny_statewide
-a---- 7/14/2020 8:07 AM 2581 .gitattributes
-a---- 8/25/2020 4:22 PM 13996 .gitignore
-a---- 8/25/2020 4:51 PM 6653 build.gradle.kts
-a---- 7/21/2020 3:36 PM 987 Dockerfile
-a---- 8/14/2020 4:28 PM 206 gradle.properties
-a---- 7/14/2020 10:08 PM 5764 gradlew
-a---- 7/14/2020 10:08 PM 2942 gradlew.bat
-a---- 7/21/2020 3:36 PM 2222 Jenkinsfile
-a---- 5/13/2020 4:17 AM 11565 PRISM-Adaptors.txt
-a---- 7/14/2020 8:07 AM 722 README.md
-a---- 8/25/2020 3:24 PM 416 settings.gradle.kts
-a---- 7/14/2020 8:07 AM 978 sh.exe.stackdump
PS C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors> ls .\adaptor-cwi_ky_statewide_smd\
Directory: C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors\adaptor-cwi_ky_statewide_smd
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/21/2020 1:24 PM build
d----- 7/21/2020 1:14 PM CWI_KY_STATEWIDE_SMDSol
-a---- 5/13/2020 4:17 AM 2581 .gitattributes
PS C:\Users\cbongiorno\dev\sterling\prism\prism-adaptors>
à la fin, je vois essentiellement besoin de répliquer ce code (exemple):
nuget.exe restore CWI_TN_DAVIDSON_SMDSol\CWI_TN_DAVIDSON_SMDSol.sln -source "https://www.nuget.org/api/v2;http://prism-prod-oct/NuGetLocalServer/nuget"
MSBuild.exe C:\PRISMGit\adaptor-cwi_tn_davidson_smd\CWI_TN_DAVIDSON_SMDSol\CWI_TN_DAVIDSON_SMDSol.sln /t:Clean /p:Configuration=Release
MSBuild.exe C:\PRISMGit\adaptor-cwi_tn_davidson_smd\CWI_TN_DAVIDSON_SMDSol\CWI_TN_DAVIDSON_SMDSol.sln /t:Rebuild /p:Configuration=Release
Set-Location C:\PRISMGit\adaptor-cwi_tn_davidson_smd\CWI_TN_DAVIDSON_SMDSol\PRISM.Adaptor.CWI.TN.DAVIDSON.SMD\
$Package = Find-Package -Name PRISM.Core.FulfillmentMicroService -Source http://prism-prod-oct/NuGetLocalServer/nuget NuGet.exe install $Package.Name -Version $Package.Version -source http://prism-prod-oct/NuGetLocalServer/nuget Copy-Item -Path .\bin\Release\PRISMDataAdaptor.dll -Destination (".\"+$Package.Name+ "." + $Package.Version+"\") -Recurse -Force
Réponses
Concernant la configuration de votre tâche de copie:
val cpfms by register<Copy>("cpFms") {
dependsOn(rootProject.tasks.named("pullfms"))
doLast {
// ...
from(from)
into(projectDir)
}
}
val cpdll by register<Copy>("cpFmsdll") {
dependsOn(cpfms,build)
doLast {
// …
from(from)
into(to)
}
}
Le problème est que vous configurez votre tâche de copie lors de son exécution. Je pense donc que vos tâches ne sont pas configurées et ensuite non exécutées.
Vous pouvez voir un exemple de configuration dans la documentation Gradle Copy . Il n'y a pas de doLastpartie.
Votre tâche de copie repose sur un fichier / répertoire créé par une tâche antérieure. Je pense que vous devriez considérer que le fichier sera ici et utiliser include à partir d'un modèle et non concernant le fait que les fichiers sont vraiment ici (ce qui peut expliquer pourquoi vous avez utilisé doLast)
Exemple:
val cpfms by register<Copy>("cpFms") {
dependsOn(rootProject.tasks.named("pullfms"))
from("**/PRISMDataAdaptor.dll")
into("prism.core.fulfillmentmicroservice")
}
Ok, merci à @dwursteisen de m'avoir mis sur la bonne voie. La résolution de ce problème spécifique nécessitait l'utilisation de la délégation:
val cpfms by register<Copy>("cpFms") {
dependsOn(rootProject.tasks.named("pullfms"))
val from by lazy {
rootProject.projectDir.listFiles()
.find { it.isDirectory() && it.name.toLowerCase().startsWith("prism.core.fulfillmentmicroservice") }
}
from(from)
into(projectDir)
}
Cela fonctionne maintenant. Cependant, l'exemple ci-dessus peut en fait être meilleur car il est tout simplement moins compliqué.