我是靠谱客的博主 时尚大神,最近开发中收集的这篇文章主要介绍关于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 的时候,报找不到类的错误

 

转载于:https://www.cnblogs.com/westlin/p/10908778.html

最后

以上就是时尚大神为你收集整理的关于maven多module的依赖问题的全部内容,希望文章能够帮你解决关于maven多module的依赖问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部