代码之家  ›  专栏  ›  技术社区  ›  chris

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

  •  2
  • chris  · 技术社区  · 7 年前

    我一直试图在类似的问题中找到这个问题的答案,但我仍然不知道是什么导致了这个问题。

    我有一个多模块Maven项目,我正在尝试运行 mvn install 或 mvn package 我得到以下错误

    [信息]应用程序成功 [ 1.025秒]

    [信息]模块数据故障[故障] 0.952秒

    [信息]模块应用程序跳过

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

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

    父节点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>
    

    项目数据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>
    

    项目应用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 但是,在下载并运行之后 打包 ,它工作得很好。我看不出我的项目和这个项目的POM文件有多大的区别,所以我会遗漏什么呢?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Szilárd Fodor    7 年前

    我会移动整个

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

    从父模块到模块应用程序模块的部分,因为该模块是使用重新打包功能的单个模块。

    更重要的是,我也会从模块数据中删除插件部分,因为不需要重新打包该模块。

        2
  •  0
  •   chris    7 年前

    感谢@wemu的评论部分。

    添加:

    <configuration>
        <mainClass> ${your.start.Class}</mainClass>
    </configuration>
    

    版本2.1.1.release的插件部分是必需的。 spring-boot-starter-parent 依赖关系,只要您的类在另一个模块中。

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

        3
  •  0
  •   soul    7 年前

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

    我的脚步是:

    1. 更改的包装 pom.xml 项目数据的文件从 JAR(我使用了Eclipse概述)
    2. 添加 <type>pom</type> 在里面 XML 用于依赖模块数据的项目应用程序的文件
            <dependency>
                <groupId>samee.springframework</groupId>
                <artifactId>project-data</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                 <type>pom</type>
            </dependency>  
    

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

        4
  •  0
  •   ala    7 年前

    我刚刚将父pom.xml中的Spring引导版本从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中实现,但这是一个快速简单的解决方案。