如何在一个模块中构建没有主类的多模块Maven项目

时间:2019-01-01 23:18:29

标签: java spring maven multi-module

我一直试图在类似问题中找到该问题的答案,但我仍然不知道是什么原因造成的。

我有一个多模块Maven项目,并且尝试运行mvn installmvn package时遇到以下错误

  

[INFO]应用程序.................................................... ........成功   [1.025 s]

     

[INFO]模块数据..................................... FAILURE [   0.952 s]

     

[INFO] module-app ......................................跳过      

[错误]无法执行目标   org.springframework.boot:spring-boot-maven-plugin:2.1.1.RELEASE:重新打包   (重新打包)在项目项目数据上:目标的执行重新打包   org.springframework.boot:spring-boot-maven-plugin:2.1.1.RELEASE:重新打包   失败:找不到主类-> [帮助1]

project-app模块在​​src文件夹中有一个Java类,而project-data模块没有主类。

父pom.xml

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>project-data</module>
        <module>project-app</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>app</name>
    <description></description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

project-data pom.xml

<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>app</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>project-data</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

project-app pom.xml

<?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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>app</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>project-app</artifactId>

    <dependencies>
        <dependency>
            <artifactId>project-data</artifactId>
            <groupId>com.example</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

我有一个与this project(sfg-pet-clinic)的结构非常相似的东西,但是,在下载并运行mvn package之后,它可以正常工作。我的项目的pom文件与该项目的pom文件之间没有太大区别,所以我会丢失什么?

5 个答案:

答案 0 :(得分:3)

我会移动整个

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

从父部分到module-app模块,因为那是使用重新打包功能的单个模块。

更多,我也将从模块数据中删除插件部分,因为不需要重新包装该模块。

答案 1 :(得分:1)

配置适用于较早版本的spring。

删除:

    <configuration>
       <skip>true</skip>
    </configuration>

相反,在 pom artifactId

添加此标志
   <properties>
        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
    </properties>

像这样:

 <parent>
        <artifactId>mc-pet-clinic</artifactId>
        <groupId>guru.springframework</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>pet-clinic-data</artifactId>

    <properties>
        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
    </properties>

...

答案 2 :(得分:0)

在评论部分感谢@wemu。

添加此内容:

<configuration>
    <mainClass> ${your.start.Class}</mainClass>
</configuration>
只要您的类在另一个模块中,则在spring-boot-starter-parent依赖项的版本2.1.1.RELEASE上要求

到插件部分。

我在问题中提到的项目sfg-pet-clinic使用的是旧版本,不需要进行<mainClass>配置

答案 3 :(得分:0)

好的,这是我如何解决的。

我的步骤是:

  1. 更改项目数据的pom.xml文件的包装,以将pom从 jar(我使用过Eclipse的概述)
  2. <type>pom</type>文件中为项目应用添加pom.xml,以依赖模块数据
        <dependency>
            <groupId>samee.springframework</groupId>
            <artifactId>project-data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
             <type>pom</type>
        </dependency>  

然后,您可以运行清理并打包/安装

答案 4 :(得分:0)

我刚刚将父pom.xml中的Spring Boot版本从2.1.1更改为2.0.3,并且可以使用。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

虽然最好使其在2.1.1中运行,但这是一种快速,简单的解决方案。