Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GRADLE任务运行配置_Java_Reactjs_Spring_Gradle_Build.gradle - Fatal编程技术网

Java GRADLE任务运行配置

Java GRADLE任务运行配置,java,reactjs,spring,gradle,build.gradle,Java,Reactjs,Spring,Gradle,Build.gradle,我有一个由两部分组成的项目:SpringBoot和React。 在我的Spring Boot build.gradle配置中,我指定了构建和运行应用程序应该执行的操作 下面是它的样子: plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' id "

我有一个由两部分组成的项目:SpringBoot和React。 在我的Spring Boot build.gradle配置中,我指定了构建和运行应用程序应该执行的操作

下面是它的样子:

plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
  id "com.github.node-gradle.node" version "2.2.4"
}

group = 'com.vtti'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'org.apache.poi:poi:3.10-FINAL'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
        compile 'org.apache.poi:poi:3.10-FINAL'
        compile 'org.apache.poi:poi-ooxml:3.10-FINAL'
        compile 'com.sendgrid:sendgrid-java:4.1.2'
        compile 'org.json:json:20190722'
        compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.0'
}

test {
    useJUnitPlatform()
}

node {
  // Version of node to use.
  version = '10.16.3'
  // Version of Yarn to use.
  yarnVersion = '1.21.1'

  // Base URL for fetching node distributions (change if you have a mirror).
  distBaseUrl = 'https://nodejs.org/dist'

  // If true, it will download node using above parameters.
  // If false, it will try to use globally installed node.
  download = true

  // Set the work directory for unpacking node
  workDir = file("${project.buildDir}/nodejs")
  // Set the work directory for YARN
  yarnWorkDir = file("${project.buildDir}/yarn")
  // Set the work directory where node_modules should be located
  nodeModulesDir = file("${project.projectDir}")
}


task appYarnInstall(type: YarnTask) {
  description = "Install all dependencies from package.json"
  workingDir = file("${project.projectDir}/src/main/client")
  args = ["install"]
}

task appYarnBuild(type: YarnTask) {
  description = "Build production version of the React client"
  workingDir = file("${project.projectDir}/src/main/client")
  args = ["run", "build"]
}

task copyClient(type: Copy) {
  from 'src/main/client/build'
  // into 'build/resources/main/static/.'
  into 'src/main/resources/static/.'
}

appYarnBuild.dependsOn appYarnInstall
copyClient.dependsOn appYarnBuild
compileJava.dependsOn copyClient
当我运行gradlew build时,一切正常,Gradle执行纱线安装、纱线构建等

然而,当我运行gradlew bootRun并只想编译和运行一个项目时,它会再次执行所有的操作并构建一个新的前端,这会导致多个更改的文件,这些文件对git是可见的,应该再次提交


是否可以指定何时运行任务,并且只在gradlew build上运行任务,而不在gradlew bootRun上运行任务?

您可以使用-x命令行选项并提供要排除的任务的名称来排除正在执行的任务

e、 g。
gradle bootRun-x appYarnInstall

您可以使用-x命令行选项并提供要排除的任务的名称来排除正在执行的任务

e、 g。
gradle bootRun-x appYarnInstall

以前有人问过这个问题,但在您的特定情况下,这可能就是您想要的:

gradle.taskGraph.whenReady { graph ->
  if (graph.hasTask(bootRun)) {
    tasks.withType(YarnTask){
      enabled = false
    }
  }
}

以前有人问过这个问题,但在您的具体情况下,这可能就是您要寻找的:

gradle.taskGraph.whenReady { graph ->
  if (graph.hasTask(bootRun)) {
    tasks.withType(YarnTask){
      enabled = false
    }
  }
}

像这样的问题经常出现,答案几乎总是针对症状而不是实际原因。大多数解决方案将包括以下渐变功能之一:

命令行选项-x或其程序等效项gradle.startParameter.excludedTaskNames 直接访问gradle.taskGraph 任务的onlyIf子句 在大多数情况下,这些解决方案实际上是肮脏的黑客行为,以后可能会也可能不会适得其反

许多情况下的实际问题是任务配置和连接方式错误。Gradle世界中一个常见的误解是,只有少数任务可以从命令行调用。基于这一假设,整个构建脚本是围绕这些任务设计的,通常只有来自Java插件的任务构建。在这些情况下,整个构建脚本由dependsOn语句组成,这些语句在调用gradlebuild时以正确的顺序执行任务。您的问题集中在命令上,而不是任务gradlew build和gradlew bootRun,显示了相同的问题:

是否可以指定何时运行任务,并且只在gradlew build上运行任务,而不在gradlew bootRun上运行任务

对于你的问题,一个更好的问题是:

是否可以仅在需要运行时运行任务appYarnInstall和appYarnBuild

正如您在问题中所解释的,实际问题是由任务再次运行这一事实引起的。那么,也许我们应该弄清楚他们什么时候需要逃跑?如果我正确理解您的项目结构,则有两种情况需要运行它们:

如果前端根本不存在,例如在新的结账台上 如果某些前端源文件发生更改 现在,您可以在构建脚本中实现此逻辑,但Gradle提供了开箱即用的功能。您只需要定义创建文件的任务的输入和输出,Gradle就会知道任务何时需要运行

由于我不完全了解您的哪些任务处理哪些文件,并且我不熟悉Gradle Node插件,因此我很难给您提供一个完全工作的构建脚本,但让我给您一些提示:

不要将Gradle处理的源目录与Node或Thread等外部系统处理的源目录混合使用。workingDir hack是必要的,因为这些工具需要另一个存储库布局。在当前设置中,任务结果最终位于源目录src/main/client/build中

不要使用Copy类型的任务。相反,请定义任务appYarnBuild的输出,并将此任务用作processResources的附加输入。这也消除了任务对compileJava的依赖性

始终将任务的结果存储在buildDir中,而不是存储在src的子文件夹中。通过这种方式,您可以始终使用gradle clean build创建干净的构建。如果任务在src内创建文件,则在清理期间不会删除这些文件,并且可能会在以后的生成中导致问题


像这样的问题经常出现,答案几乎总是针对症状而不是实际原因。大多数解决方案将包括以下渐变功能之一:

命令行选项-x或其程序等效项gradle.startParameter.excludedTaskNames 直接访问gradle.taskGraph 任务的onlyIf子句 在大多数情况下,这些解决方案实际上是肮脏的黑客行为,以后可能会也可能不会适得其反

许多情况下的实际问题是任务配置和连接方式错误。Gradle世界中一个常见的误解是,只有少数任务可以从命令行调用 . 基于这一假设,整个构建脚本是围绕这些任务设计的,通常只有来自Java插件的任务构建。在这些情况下,整个构建脚本由dependsOn语句组成,这些语句在调用gradlebuild时以正确的顺序执行任务。您的问题集中在命令上,而不是任务gradlew build和gradlew bootRun,显示了相同的问题:

是否可以指定何时运行任务,并且只在gradlew build上运行任务,而不在gradlew bootRun上运行任务

对于你的问题,一个更好的问题是:

是否可以仅在需要运行时运行任务appYarnInstall和appYarnBuild

正如您在问题中所解释的,实际问题是由任务再次运行这一事实引起的。那么,也许我们应该弄清楚他们什么时候需要逃跑?如果我正确理解您的项目结构,则有两种情况需要运行它们:

如果前端根本不存在,例如在新的结账台上 如果某些前端源文件发生更改 现在,您可以在构建脚本中实现此逻辑,但Gradle提供了开箱即用的功能。您只需要定义创建文件的任务的输入和输出,Gradle就会知道任务何时需要运行

由于我不完全了解您的哪些任务处理哪些文件,并且我不熟悉Gradle Node插件,因此我很难给您提供一个完全工作的构建脚本,但让我给您一些提示:

不要将Gradle处理的源目录与Node或Thread等外部系统处理的源目录混合使用。workingDir hack是必要的,因为这些工具需要另一个存储库布局。在当前设置中,任务结果最终位于源目录src/main/client/build中

不要使用Copy类型的任务。相反,请定义任务appYarnBuild的输出,并将此任务用作processResources的附加输入。这也消除了任务对compileJava的依赖性

始终将任务的结果存储在buildDir中,而不是存储在src的子文件夹中。通过这种方式,您可以始终使用gradle clean build创建干净的构建。如果任务在src内创建文件,则在清理期间不会删除这些文件,并且可能会在以后的生成中导致问题