未执行渐变依赖关系



我的情况是:

  • 在打包此应用程序之前,我需要提取一个公共依赖项
  • 我把它拉到根目录一次,然后为了速度把它复制到子项目
  • 然后我需要构建
  • 将构建工件放入复制的目录

所以,当我运行这个示例任务时,它会将依赖项拉到根文件夹,但从不复制它,我只是不明白为什么。下面是我的削减kotlin建设

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"
}
}

所以当我跑步的时候gradle :adaptor-cwi_ky_statewide_smd:cpFmsdll

我预计它会

  1. 根据根项目中的定义提取我的依赖项
  2. 将其复制到本地项目
  3. 构建
  4. 在步骤2中将生成dll复制到文件夹中

试运行显示了我的预期:

PS C:Userscbongiornodevsterlingprismprism-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

但执行死刑并没有真正做到这一点?!直接在本地项目中没有复制,但在根项目中

PS C:Userscbongiornodevsterlingprismprism-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 Studio2017ProfessionalMSBuild15.0bin'.
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:Userscbongiornodevsterlingprismprism-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:Userscbongiornodevsterlingprismprism-adaptors> ls | select -Last 20

Directory: C:Userscbongiornodevsterlingprismprism-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:Userscbongiornodevsterlingprismprism-adaptors> ls .adaptor-cwi_ky_statewide_smd

Directory: C:Userscbongiornodevsterlingprismprism-adaptorsadaptor-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:Userscbongiornodevsterlingprismprism-adaptors>

最后我看到基本上需要复制这个代码(示例(:

nuget.exe restore CWI_TN_DAVIDSON_SMDSolCWI_TN_DAVIDSON_SMDSol.sln -source "https://www.nuget.org/api/v2;http://prism-prod-oct/NuGetLocalServer/nuget"
MSBuild.exe C:PRISMGitadaptor-cwi_tn_davidson_smdCWI_TN_DAVIDSON_SMDSolCWI_TN_DAVIDSON_SMDSol.sln /t:Clean /p:Configuration=Release
MSBuild.exe C:PRISMGitadaptor-cwi_tn_davidson_smdCWI_TN_DAVIDSON_SMDSolCWI_TN_DAVIDSON_SMDSol.sln /t:Rebuild /p:Configuration=Release
Set-Location C:PRISMGitadaptor-cwi_tn_davidson_smdCWI_TN_DAVIDSON_SMDSolPRISM.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 .binReleasePRISMDataAdaptor.dll -Destination ("."+$Package.Name+ "." + $Package.Version+"")   -Recurse -Force

关于复制任务的配置:

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)
}
}

问题是您在执行复制任务时配置了它。所以我认为你的任务没有配置,然后就没有执行。

您可以在Gradle Copy文档中看到一个配置示例。没有doLast部分。

您的复制任务依赖于先前任务创建的文件/目录。我认为你应该考虑到文件会在这里,并使用include from关于模式,而不是关于文件真的在这里(这可能解释了你为什么使用doLast(

示例:

val cpfms by register<Copy>("cpFms") {
dependsOn(rootProject.tasks.named("pullfms"))
from("**/PRISMDataAdaptor.dll")
into("prism.core.fulfillmentmicroservice")
}

好的,感谢@dwursteisen让我走上正轨。解决这个特定问题需要使用委托:

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)
}

现在,这确实有效。然而,上面的样本实际上可能更好,因为它只是简单地不那么复杂。

最新更新