gradle依赖没有被执行

标签 gradle

我的情况是这样的:

  • 在我可以打包这个应用程序之前,我需要拉一个公共(public)依赖
  • 我拉一次到根目录,然后复制到子项目中提速
  • 然后我需要构建
  • 将构建工件放入此复制目录

  • 所以,当我运行这个示例任务时,它会将依赖项拉到根文件夹但从不复制它,我只是不明白为什么。下面是我精简的 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我希望它会
  • 按照根项目
  • 中的定义拉取我的依赖项
  • 复制到本地项目
  • 构建
  • 将构建 dll 复制到步骤 2 中的文件夹中

  • 试运行显示了我的期望:
    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
    
    但执行实际上并没有这样做?!直接没有复制到本地项目中,而是在根项目中
    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>
    
    最后我看到基本上需要复制这段代码(示例):
    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
    

    最佳答案

    关于复制任务的配置:

    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 documentation 中查看配置示例。 .没有doLast部分。
    您的复制任务依赖于先前任务创建的文件/目录。
    我认为您应该考虑该文件将在此处并使用 include from 关于模式而不是关于该文件真的在这里(这可以解释您为什么使用 doLast )
    例子:
    val cpfms by register<Copy>("cpFms") {
        dependsOn(rootProject.tasks.named("pullfms"))
        from("**/PRISMDataAdaptor.dll")
        into("prism.core.fulfillmentmicroservice")
    }
    

    关于gradle依赖没有被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63588767/

    相关文章:

    android - 在Android Studio中Gradle构建失败

    android - 使用packageReleaseJar取决于

    gradle - Spark microframework 2.1可以在Tomcat中很好地部署,但不能在2.5版中部署

    gradle - 在自定义Gradle插件中管理版本号

    testing - gradle 编译但不运行测试

    android - 智能 : Gradle syn failed

    java - 'sourceSets'无法应用于IntelliJ 2016中的groovy.lang.Closure <org.gradle.api.tasks.SourceSet>警告

    java - 启动 vscode flutter 调试时无法确定任务 ':app:flutterBuildDebug' 的依赖关系

    android-studio - Gradle无法在android studio中工作[flutter]

    gradle - 使用自定义gradle包装器吸引gradle冲突