使用 Spring Boot 的 starter web parent 时出现无效的打包错误

Posted

技术标签:

【中文标题】使用 Spring Boot 的 starter web parent 时出现无效的打包错误【英文标题】:Invalid packaging error when using Spring Boot's starter web parent 【发布时间】:2019-03-09 16:02:39 【问题描述】:

我想为我的项目使用 spring-boot-starter-web 父级。不幸的是,如果我尝试使用它,我会收到以下错误消息:

[ERROR] [ERROR] 处理 POM 时遇到了一些问题: [错误] 父 POM org.springframework.boot:spring-boot-starter-web:2.0.5.RELEASE 的包装无效,必须是“pom”但是“jar”@org.springframework.boot:spring- boot-starter-web:2.0.5.RELEASE @ [错误] 构建无法读取 1 个项目 -> [帮助 1] [错误] [错误] 项目 com.company:my-artifact:1.0-SNAPSHOT (/home/user/Projects/my-artifact/pom.xml) 有 1 个错误 [错误] 父 POM org.springframework.boot:spring-boot-starter-web:2.0.5.RELEASE 的包装无效,必须是“pom”但是“jar”@org.springframework.boot:spring- boot-starter-web:2.0.5.RELEASE

如果我将 parent 更改为 spring-boot-starter-parent,则不会发生此错误,并且构建完成且没有错误。

这是我pom.xml的MWE:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>my-artifact</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <kotlin.version>1.2.71</kotlin.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jdk8</artifactId>
            <version>$kotlin.version</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>$kotlin.version</version>
                <configuration>
                    <jvmTarget>1.8</jvmTarget>
                </configuration>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

该项目是使用 IntelliJ 创建的 Kotlin 项目,通过从原型创建一个新的 Maven 项目并为 JVM 原型选择 kotlin,因此我拥有的唯一文件是 pom.xmlsrc/main/kotlin/com/company/Hello.kt,内容如下:

package com.company

fun main(args: Array<String>) 
    println("Hello, World")

还有src/test/kotlin/com/company/HelloTest.kt下的测试文件:

package com.copmany

import org.junit.Test
import kotlin.test.assertEquals

class HelloTest 


据我所知,我的 POM 是正确的。我多次尝试mvn clean build,但下载的依赖项似乎没有问题。 spring-boot-starter-web 不应该用作父母吗?

【问题讨论】:

docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/html/… 【参考方案1】:

您必须将spring-boot-starter-parent 设置为父级

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

spring-boot-starter-web 作为你的依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
        <version>$kotlin.version</version>
    </dependency>
</dependencies>

【讨论】:

我想我必须更改我关注的指南。 如果我的回答解决了你的问题,别忘了也接受答案(绿色检查)【参考方案2】:

我建议使用https://docs.spring.io 中的“Spring Boot 参考指南”

【讨论】:

以上是关于使用 Spring Boot 的 starter web parent 时出现无效的打包错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 JUnit 5 的 spring-boot-starter-test

spring-boot-starter-web 和 spring-boot-starter-webflux 不能一起工作吗?

有没有办法使用spring boot starter app graphql-spring-boot-starter公开2个graphql端点?

独立使用时 spring-boot-starter-jdbc 的问题

Spring Boot 应用程序使用 spring-boot-starter-actuator 给出“无法启动 tomcat”异常

企业级spring-boot案例-自定义Spring Boot Starter