Gradle:仅当文件夹存在时运行任务

3pmvbmvn  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个Java应用程序,其中有一个Web组件。我试图跳过运行npm install,如果node_modules文件夹已经存在:

tasks.register<NpmTask>("appNpmInstall") {
    onlyIf { !file("node_modules").exists() }
    description = "Installs all dependencies from package.json"
    workingDir = file("${project.projectDir}/src/main/webapp")
    args = listOf("install")
}

字符串
但是,在这种配置下,任务仍然运行。如果node_modules存在,我如何跳过任务?

kdfy810k

kdfy810k1#

我也有这个确切的问题,这是我最终为我的模块build.gradle.kts编写的Exec任务实现

open class NpmInstallTask  @Inject constructor(
  objectFactory: ObjectFactory
) : Exec() {

  @get:InputFile
  @get:PathSensitive(PathSensitivity.RELATIVE)
  val packageJson = objectFactory.fileProperty()

  @get:OutputDirectory
  val npmModule = objectFactory.directoryProperty()

  @get:OutputFile
  val packageLockJson = objectFactory.fileProperty()

  init {
    commandLine = arrayListOf("npm", "install")
  }
}

val npmInstall = tasks.register<NpmInstallTask>("npmInstall") {
  packageJson.set(layout.projectDirectory.file("package.json"))
  npmModule.set(layout.projectDirectory.dir("node_modules"))
  packageLockJson.set(layout.projectDirectory.file("package-lock.json"))
}

// The build task name may depend on your projects setup, please update accordingly 
tasks.getByName("build").dependsOn(npmInstall)

字符串
现在,如果node_module不存在或者package.json自上次任务运行以来已经更改,那么它将再次执行。如果node_module确实存在或者package.json自上次运行以来没有更改。如果您在运行任务时添加--info,那么您应该看到类似于任务是否由于最新而被跳过的内容。

> Task :web:npmInstall UP-TO-DATE
Build cache key for task ':web:npmInstall' is 9fa2ecfdb23584a3i04f0c760e8e34d0
Skipping task ':web:npmInstall' as it is up-to-date.

相关问题