Spring Boot Maven插件找不到类。

27

我有三个Maven项目,其中一个是POM包,另外两个是JAR包,这里是admin-aggregator pom文件。

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sounds.bvs</groupId>
    <artifactId>admin-aggregator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>


    <modules>
        <module>../admin-lib</module>
        <module>../admin-rest</module>
    </modules>


    <properties>
        <project.build.SourceEncoding>UTF-8</project.build.SourceEncoding>
        <spring-boot-version>2.0.4.RELEASE</spring-boot-version>
        <spring-version>2.0.4.RELEASE</spring-version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <start-class>com.sounds.bvs.AdminRestApp</start-class>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.sounds.bvs</groupId>
                <artifactId>admin-lib</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.sounds.bvs</groupId>
                <artifactId>admin-rest</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <classifier>exec</classifier>
                            <mainClass>${start-class}</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven.compiler.plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showDeprication>true</showDeprication>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

对于admin-rest pom.xml文件和它的主类,我不知道缺少了什么,因为ctrl-click可以导航到相应的项目并且类型搜索可以在admin-rest项目中找到主类,ctrl+shift+T也可以用,但仍然显示相同的结果。

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.sounds.bvs</groupId>
        <artifactId>admin-aggregator</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>admin-rest</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sounds.bvs</groupId>
            <artifactId>admin-lib</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jetty -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>


    </dependencies>
</project>

我正在尝试使用主类AdminRestApp.java运行admin-aggregator。

mvn clean spring-boot:run
mvnw.cmd clean spring-boot:run
./mvnw spring-boot:run 

但是没有一个能够正常工作。

package com.sounds.bvs;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AdminRestApp {

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



and the exception i see class not found exception i tried all which were from similar topic none helped, the start-class tag is also place and hard code the full path com.sounds.bvs.AdminRestApp in mainClass still that also did not help,

我已经尝试更改Spring Boot版本以及Maven编译器插件版本,但都没有帮助,请帮帮我,这非常需要。

之前包路径很长 com.sounds.bvs.admin.rest,那时也有同样的问题,更改包名称也没有帮助。

请告诉我我错过了什么,提前致谢。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] `enter code here`
[INFO] admin-aggregator
[INFO] admin-lib
[INFO] admin-rest
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building admin-aggregator 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ admin-aggregator ---
[INFO] 
[INFO] >>> spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) > test-compile @ admin-aggregator >>>
[INFO] 
[INFO] <<< spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) < test-compile @ admin-aggregator <<<
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) @ admin-aggregator ---
[WARNING] 
java.lang.ClassNotFoundException: com.sounds.bvs.AdminRestApp
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:491)
    at java.lang.Thread.run(Thread.java:745)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] admin-aggregator ................................... FAILURE [ 42.358 s]
[INFO] admin-lib .......................................... SKIPPED
[INFO] admin-rest ......................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 56.280 s
[INFO] Finished at: 2018-08-10T00:43:37+05:30
[INFO] Final Memory: 17M/111M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:run (default-cli) on project admin-aggregator: An exception occurred while running. com.sounds.bvs.AdminRestApp -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

我认为你父项目的pom.xml文件中的两个<module>元素应该是两个子模块的名称,而不是它们的相对路径位置。 - moilejter
你本地安装了这两个依赖项吗?对于两者都要运行mvn clean install命令? - Daisy Day
是的,两个都完成了,jar包在.m2中可用,但如果我只提供名称,我会得到以下错误:[INFO] 扫描项目... [ERROR] [ERROR] 处理POM时遇到一些问题: [ERROR] F:\STS Workspace\admin-aggregator\pom.xml的子模块F:\STS Workspace\admin-aggregator\admin-lib不存在 @ [ERROR] F:\STS Workspace\admin-aggregator\pom.xml的子模块F:\STS Workspace\admin-aggregator\admin-rest不存在 @然后我谷歌并更改为相对路径。 - Vikram
8个回答

82

添加一个Spring Boot版本解决了我的问题。

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.4.1</version>
        </plugin>
    </plugins>

在Maven标签->插件中,将其替换为您的Spring Boot版本


我有同样的问题,这个建议解决了它。此外,您可能需要确保插件版本与您的Spring Boot版本匹配。因此,请先检查您当前的Spring Boot版本,并将相同的版本放入spring-boot-maven-plugin的版本中。 - abmap

32

对我很有效。

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

它可以用于POM验证,但在需要将应用程序打包成可执行的JAR文件时(具有Spring Boot重新打包目标的特定配置),似乎不正确。在这种情况下,该插件应该添加到“pluginManagement”之外,并且版本必须明确设置。但是在这种情况下,您可以使用${project.parent.version}来避免硬编码。 - StøcciD
在我的情况下,我看到了这篇文章,并添加了pluginManagement标签来包装插件标签,错误消息“Spring boot maven plugin class not found”就不再显示了。谢谢Mirrashad。 - Genivan

12

在pom.xml文件中添加${project.parent.version}依赖项,这对我解决了问题。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>${project.parent.version}</version>
  <type>maven-plugin</type>
</dependency>


请尽可能具体地提供您的建议,并且如果可能,请提供一个示例。谢谢。 - sanastasiadis
1
我喜欢你的帖子,因为 ${project.parent.version} 可以避免硬编码版本号。但我认为把它放在 build / plugin 节点里会更清晰,而不是放在 dependencies 节点里。(我已经测试过了 - Spring boot 2.5.5 - 它可以用于 pom 验证和打包成可执行 jar 文件) - StøcciD

10

仅添加版本信息。

<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-maven-plugin</artifactId> 
<version>${project.parent.version}</version> 

异常错误


4

2

你需要这样添加Spring Boot版本:

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>version</version>

1
你需要从包含Spring Boot应用程序(admin-rest)的maven模块中执行mvn spring-boot:run命令,而不是从父模块(admin-aggregator)执行。但是你却从父模块执行了它。

我也曾经认为是这样,但在电子书中给出或定义了,并要求执行mvn spring-boot:run,以便同时启动两者。我是否理解错了什么,如果应该在spring boot应用程序(admin-rest)上运行,那么只维护具有pom文件的admin-aggregator和其maven打包类型为pom的需要是什么?如果我在admin-rest上运行它将会运行,我一开始就尝试过了,仍然不知道聚合器的用途是什么?你能提供建议吗? - Vikram

0

我删除了 .m2 文件夹并重新安装了 pom.xml 文件,问题得到了解决。


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