当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Gradle 构建失败,并显示“任务'bootWarMainClassName'执行失败”

谷泳
2023-03-14

我有一个多项目gradle构建,Spring Boot按照默认gradle约定进行结构化。

root
   -- common
        -- src/main/java
   -- bootproject
        -- src/main/java

我目前的项目是(A)将gradle从5. x升级到7.3. x,(B)使用带有Spring Boot的嵌入式Tomcat。

这是一个已经存在很多年的项目,是Spring Boot,但是传统上一直作为一个战争文件部署在Tomcat中。

我已经按照gradle迁移指南将gradle升级到7.3.3,并正确构建了“通用”(java库)。我现在正在尝试再次正确构建“bootproject”。我已经迁移了我的构建。gradle,编译现在正确进行,但在执行“gradlew子项目:构建”时,我会得到错误:

任务“:tx main:bootWarMainClassName”的执行失败。java.lang.IllegalArgumentException(无错误消息)

我的 ROOT build.gradle 很简单:

    plugins {
        id "org.springframework.boot" version "2.6.3"
    }
    
    subprojects {
        apply plugin: 'java'
    
        group = 'com.blah'
        version = '2.1.1'
    
        repositories {
            mavenCentral()
}

有一个库子项目(通用)可以很好地构建。

Spring Boot 子项目 build.gradle 是:

plugins {
    id 'org.springframework.boot'
    id 'io.spring.dependency-management'
}

dependencies {
    implementation project(path:':common', configuration:'default')

    implementation 'org.springframework.boot:spring-boot-starter-web'

    implementation ...

}

主类最初设置为使应用程序按常规部署(扩展SpringBootServlet初始化器),但已替换为(直接取自文档):

package com.blah;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

编译成功了,这个类似乎在build/classpath中,所以我不明白为什么Gradle-Spring-Boot找不到它。我还尝试过显式地标识具有相同结果的类。

不幸的是,我发现几乎没有关于多项目gradle构建的文档,所以我怀疑这是问题的一部分。希望这里有人能给我指出哪里出了问题。

谢谢

共有1个答案

子车安和
2023-03-14

我在这里发现了问题。我们在 /buildSrc中有自定义代码,这显然是造成这种情况的原因。

 类似资料: