Gradle的war任务为什么被跳过了?

28

我是Gradle的新手。大多数任务都能正常工作。但是我发现war任务总是被跳过。当我在调试模式下运行时,我看到以下日志 -

09:12:34.889 [LIFECYCLE] [class
org.gradle.internal.buildevents.TaskExecutionLogger] :war 09:12:34.889
[DEBUG]
[org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter]
Starting to execute task ':war' 09:12:34.889 [INFO]
**[org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter] Skipping task ':war' as task onlyIf is false.** 09:12:34.889 [DEBUG]
[org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter]
Finished executing task ':war' 09:12:34.889 [LIFECYCLE] [class
org.gradle.internal.buildevents.TaskExecutionLogger] :war SKIPPED

我不确定为什么 onlyIf 的值是false。我在网上搜过了,但没找到相关的内容。

以下是我的Gradle文件 -

buildscript {
  ext {
    springBootVersion = '2.0.0.M2'
  }
  repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  }
}

// Apply the java-library plugin to add support for Java Library
apply plugin: 'java-library'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
apply plugin: 'checkstyle'
apply plugin: 'pmd'
apply plugin: 'findbugs'
apply plugin: 'jacoco'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    jcenter()
  mavenCentral()
  maven { url "https://repo.spring.io/snapshot" }
  maven { url "https://repo.spring.io/milestone" }
}

dependencies {

  compile('org.springframework.boot:spring-boot-starter')
  compile("org.springframework.boot:spring-boot-starter-web")
  compile("org.springframework.retry:spring-retry:1.2.1.RELEASE")

  compile("org.springframework.data:spring-data-cassandra:2.0.0.M4")

  compile("io.reactivex.rxjava2:rxjava:2.1.1")

  //compile("javax.persistence:persistence-api:1.0.2")
  //compile("org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final")
  compile("org.springframework.boot:spring-boot-starter-data-jpa")
  compile("com.zaxxer:HikariCP:2.6.0")

  // Test Dependencies
  testCompile("org.springframework.boot:spring-boot-starter-test")
  testCompile("org.powermock:powermock-mockito-release-full:1.6.4")
  testCompile("org.mockito:mockito-core:2.0.3-beta")
  testCompile("org.cassandraunit:cassandra-unit:3.1.3.2")
  testCompile("org.cassandraunit:cassandra-unit-spring:2.2.2.1")
  testCompile("com.h2database:h2:1.4.196")

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:21.0'

    testImplementation 'junit:junit:4.12'
}

这是我的项目结构图 -

在此输入图片描述

如果您能帮我生成WAR文件,那就太好了。


您的项目结构可能无效,例如web.xml未放置在应该放置的位置。 - Opal
我将其更改为标准项目结构 - src.main/webapp,然后在其中放置WEB-INF文件夹。web.xml位于WEB-INF文件夹中。但是,任务仍然被跳过了! - user3276247
4个回答

52

试一试

war {
    enabled = true
}

非常感谢!!!我完全是新手Gradle(我来自Ant和Maven),这对我来说似乎很荒谬... - andynaz

44

我也遇到了与jar任务相同的问题,如果您没有指定任何外部值,则它会采用enabled=false的默认值而跳过jar生成。 根据@Alexander Servetnik的建议,同样的解决方案也适用于jar。
环境: SpringBoot 2.x和 Gradle 4.4

jar {
    baseName = <your-jar name>
    enabled=true
}

2
在将Spring Boot从1.x升级到2.x后,我在Java Web应用程序上遇到了同样的问题。由于JAR任务未生成任何内容,因此无法编译依赖的Gradle项目。这个解决方案对我有用。 - Toparvion
1
还遇到了一个奇怪的问题,是在升级spring-boot 2时出现的。 - Andy Brown
1
刚刚花了一个小时才发现为什么项目A(boot 1.5.x)正在构建jar文件,而项目B(boot 2.x)却没有。 - Chris
2
即使明确运行 ./gradlew war 任务,也会跳过创建 war 文件!看起来有些违反直觉。在 build.gradle 中设置 war {enabled=true} 可以解决这个问题。 - kaicarno
只是作为注释,只要有jar { enabled=true }就足以让依赖项目正常工作。请参阅https://docs.spring.io/autorepo/docs/spring-boot/2.3.0.RELEASE/gradle-plugin/reference/html/#packaging-executable-and-normal。 - rand0m86
显示剩余2条评论

0

这是因为Springboot Gradle插件将创建一个bootJar任务,并默认禁用jar和war任务。 您可以通过在projectName.gradle中添加以下代码来启用它:

jar {
    baseName = 'projectName'
    enabled=true
    
    manifest {
      ....
    }
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接