使用POM打包聚合器的Spring Boot

时间:2014-12-04 15:07:00

标签: java spring maven spring-boot

当项目的父POM由于其子项而使用打包模式POM时,是否可以使用Spring Boots Maven插件命令spring-boot:run


我有一个带有" master"的多模块maven项目。其中的POM变成了Spring Boot Parent模块的子项。看起来像这样:

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>project</artifactId>
    <packaging>pom</packaging>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.0.BUILD-SNAPSHOT</version>
        <relativePath/>
    </parent>

    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <start-class>com.example.module1.Application</start-class>
        <java.version>1.8</java.version>
    </properties>

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

这基本上是我们的&#34;主人&#34;每个孩子使用的POM作为它的父母。现在我们要从工作目录执行spring-boot:run命令&#34; master&#34; POM就在。问题是,这会生成一个奇怪的ClassNotFoundException,因为module1(这个Application类所在的位置)包含在POM中并作为模块提及。

使用单个模块maven项目和<packaging>jar</packaging>这会编译并运行Application类,因此Spring-Boot不能正常工作。

在处理多模块Maven项目时,我需要做些什么来改变它,或者根本不可能使用spring-boot-maven-plugin插件?


旁注:我的应用程序类/模块1将其他模块作为依赖项,因此在回答问题时请记住这一点。任何关于如何改进这一点的建议都非常感谢。

2 个答案:

答案 0 :(得分:0)

据我所知,这是不可能的,因为插件需要一个可执行的jar来运行。

spring-boot plugin目标“运行”的文档说:

  

描述

     

运行可执行档案应用程序

打包pom不会创建可执行文件。它只会生成一个pom.xml。

尝试运行mvn install并查看部署到本地存储库的工件:

我刚刚为包装pom的模块做了一件事:

[INFO] Installing C:\projects\boot-parent\pom.xml to 
C:\Users\...\repository\no\boot-parent\0.0.1-SNAPSHOT\boot-parent-0.0.1-SNAPSHOT.pom

如您所见,工件是boot-parent-0.0.1-SNAPSHOT.pom。


尝试将插件配置放在具有start-class(main-class)并具有打包jar的module1的pom中。

编辑您的评论:

您的评论表明您的客户端Maven安装存在问题。看看this answer。特别是@ChristianAchilli给出的答案。

  

我通过删除本地仓库中相应的无法下载工件目录来解决此问题。下次我运行maven命令时,会再次触发工件下载。因此,我认为这是客户端设置。

再次希望这有帮助!

托马斯

答案 1 :(得分:0)

使一个模块更多,只有你的应用程序在里面。 如果将依赖项插入模块,则可以使用spring-boot启动模块,运行或导出为jar。

仅将您的父母视为容器。

希望能为你效劳