【问题标题】:Build War with multi module project使用多模块项目构建战争
【发布时间】:2018-10-06 13:50:15
【问题描述】:

我有一个多模块 maven 项目,其中包含三个不同的模块 Module-Data、Module-Domain、Module-Web。这三个项目都是 Spring Boot 项目,但是 Module-Web 是该项目的 Web 组件,它处理我想要为其构建 war 文件的所有面向 Web 的内容。我有一个包含以下 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.somename</groupId>
<artifactId>My-Project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
    <module>module-data</module>
    <module>module-domain</module>
    <module>modele-web</module>
</modules>

Module-Domain 依赖于 Module-Data,Module-Web 依赖于 Module-Data 和 Module-Domain。我遇到的问题是,当我尝试使用 maven 构建项目时,在构建 Module-Domain 时出现以下错误:

package com.somename.data.model does not exist // class file with this error

从 Module-Data 项目导入的 Module-Domain 类文件失败并出现此错误。我怀疑这是因为 maven 在构建时没有将 Module-Data jar 添加到 Module-Domain 中,尽管它在其 pom 文件中引用。如何解决这个问题并生成一个包含所有依赖项的 war 文件?

模块域 pom.xml:

    <dependency>
        <groupId>com.somename.data</groupId>
        <artifactId>module-data</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

模块-Web pom.xml

   <dependency>
        <groupId>com.somename.data</groupId>
        <artifactId>module-data</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.somename.domain</groupId>
        <artifactId>module-domain</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

【问题讨论】:

  • 验证是否在每个 pom.xml 上定义了版本 0.0.1-SNAPSHOT。因为在父 pom 中,您正在为所有模块定义版本 1.0-SNAPSHOT,除非您在子项目中重新定义它。我的意思是,当您设置依赖项时,版本应该匹配。

标签: java maven spring-mvc spring-boot intellij-idea


【解决方案1】:

这是您正在使用的一种简单直接的方法。应该不会造成问题。

模块域 pom.xml:

<parent>
    <groupId>com.somename</groupId>
    <artifactId>My-Project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.somename.data</groupId>
        <artifactId>module-data</artifactId>
        <version>0.0.1-SNAPSHOT</version> <!-- Make sure this version is correct -->
    </dependency>
</dependencies>

模块-Web pom.xml:

<parent>
    <groupId>com.somename</groupId>
    <artifactId>My-Project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>com.somename.domain</groupId>
        <artifactId>module-domain</artifactId> <!-- pulls "module-data" as well : transitive dependency -->
        <version>0.0.1-SNAPSHOT</version> <!-- Make sure this version is correct -->
    </dependency>
</dependencies>

在将构建所有模块的父项目上执行 ma​​ven clean compile

如果您仍然看到任何编译问题,则需要修复源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2013-11-17
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多