• 关于maven多module的依赖问题


    之前的项目因为历史的原因,都是一个project里只包含了一个module,今年进入了新的项目组,出现了多个module,最近刚好也是在学《maven实战》因此想要将这个东西记录下来

    工程情况如下图

    示例的工程名为inaction

    其中位于根目录的pom.xml内的代码如下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <modelVersion>4.0.0</modelVersion>
     6 
     7     <groupId>com.example</groupId>
     8     <artifactId>inaction</artifactId>
     9     <packaging>pom</packaging>
    10     <version>1.0-SNAPSHOT</version>
    11 
    12     <modules>
    13         <module>inactionuser</module>
    14         <module>inactioncore</module>
    15         <module>inactionparent</module>
    16     </modules>
    17 
    18 </project>

    因为是多module,所以必然是有自己编写的类或接口,是可以放在公共的module里的这里我把它命名为 inaction-core

    然后有一个inaction-user表示用户模块的

    一般的,如果我们需要将本地一些代码抽取到公共模块,那么还需要一个module来进行管理,在我的项目中,这个为 inaction-parent

    记得要设置<realtivePath>../pom.xml</realtivePath>

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5 
     6     <modelVersion>4.0.0</modelVersion>
     7 
     8     <groupId>com.example</groupId>
     9     <artifactId>inaction-parent</artifactId>
    10     <version>1.0-SNAPSHOT</version>
    11 
    12     <!-- dependmanager不会向子类真的导入依赖,只是起到一个约束的作用 -->
    13     <dependencyManagement>
    14         <dependencies>
    15             <!-- 这里声明本地公共的module -->
    16             <dependency>
    17                 <groupId>com.example</groupId>
    18                 <artifactId>inaction-core</artifactId>
    19                 <version>1.0-SNAPSHOT</version>
    20             </dependency>
    21         </dependencies>
    22     </dependencyManagement>
    23 
    24 </project>

    再看core和user 两个module

    (ps 在paren头结点下,记得补充 <relativePath>../inactionparent/pom.xml</relativePath>)

    <?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>
            <groupId>com.example</groupId>
            <artifactId>inaction-parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>inaction-user</artifactId>
        <packaging>jar</packaging>
    
    
        <dependencies>
            <!--注意到这里我们已经不需要声明版本了,因为在parent那边已经对版本进行了管理-->
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>inaction-core</artifactId>
            </dependency>
        </dependencies>
    </project>

    core模块就很简单,只需要声明其父module即可

    <?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>
            <groupId>com.example</groupId>
            <artifactId>inaction-parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <packaging>jar</packaging>
    
        <artifactId>inaction-core</artifactId>
    
    
    </project>

    然后,在user模块中去引用core的类就不会有编译问题了

    如果多module没有引用本地的module,那么可以不需要parent,直接声明到根目录下

    注意,你的root,parent和公共的module,一定不要有 maven plugin,尤其是公共的module,会导致在 mvn clean install 的时候,报找不到类的错误

  • 相关阅读:
    java:字符串的split方法,使用多个分隔符,分割一个字符串
    mysql 导入txt数据到数据表【原创】
    配置SSH无密码登录【原著】
    springboot 控制台程序读取配置文件(原创)
    Idea开发环境中,开发springboot类型的项目,如果只引入parent节点,不添加依赖节点,maven是不会加载springboot的任何依赖的
    Windows版的OpenJDK下载(Red Hat 提供)
    谈谈php里的IOC控制反转,DI依赖注入(转)
    高质量的工程代码为什么难写 (转)
    系统权限管理设计 (转)
    php mqtt client
  • 原文地址:https://www.cnblogs.com/westlin/p/10908778.html
Copyright © 2020-2023  润新知