IDEA之Maven多工程项目创建

x33g5p2x  于2021-10-08 转载在 Java  
字(2.6k)|赞(0)|评价(0)|浏览(621)

其实多工程项目就和多层架构一个道理 只是将包级别 升级为单元级别

将原来的一个项目一个工程 改变为一个项目多个工程 多个工程=(架构)

但是原理没有变化 这种好处就是分离性好 每一个架构都是一个单独的个体 ​ 可以通过Maven依赖的方式来进行整合

不好的地方就是 每次修改其他 工程里的代码后 需要将项目重新 编译 也就是

clean 删除全部的target 然后 在运行tomcat 重新编译

这里主要演示Maven web 项目 其他的都类似

Maven多工程项目(同级)

每个项目pom.xml都是独立的 不共享

如果项目1 想要使用 项目2的东西 那么需要将项目2的依赖导入项目2里 pom.xml

创建步骤

第一步

New project

第二步

第三步

他会自动弹出来一个框 点击加号

当然没有弹出也不要紧

第四步

第五步

然后

这里注意如果和我一样出现了这样的问题的不要慌 如果没有此错误就跳过

这是没有找到这些插件

解决办法:去设置里将IDEA中的默认Maven和仓库 改为你自己的

然后Apply 后你就会发现 插件不报错了 然后点击自动导入

然后就会显示

按照上面第三步 到第五步的步骤 重复创建

这里注意的是 因为是web项目所以需要创建一个 new_web(Maven web 模板) 因为最后这些项目 都会被打包放入web项目里而运行只会运行new_web项目

new_web创建方法

看仔细点 这里是你自己的Maven配置文件和仓库 否则等会将创建失败爆一大堆错误

按照上面的步骤 创建完成后该如何使用呢

使用方法

很简单 和往常运行项目一样 你可以使用Maven中的Tomact7 或者IDEA中的Tomcat都行 这里主要演示 IDEA中的Tomcat 而Maven中的Tomact7运行方式去看我的IDEA-Maven使用这篇博客

只是要注意 项目和项目之间的调用 需要将项目的依赖导入到 对应项目pom.xml里

而且最后打包成war 打包的是new_web 而不是其他的单元

这里我简单演示下:

在new_dao单元里创建一个类UserDao 然后在

new_service 单元里创建一个类UserService

那么如果在UserService类里调用UserDao类 ?

如果直接调用用会报错找不到此类

解决方案:

第一种在当前单元的pom.xml中将上面这坐标信息添加进去

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>new_dao</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

这个依赖信息在哪里找 ? 对应单元的pom.xml中就有

  1. 第二种鼠标点击报错代码然后ALT+Enter

之后就会自动在当前单元的pom.xml中将new_dao依赖添加进去

完成以上步骤就可以使用了

如何启动new_web项目呢?

从图中可以看出来他们的关系 new_service中包含了(其他单元的jar)

然后将new_service的jar 放入到 new_web单元项目里 pom.xml中 那么 此时new_web单元项目就包含了其他所有单元的jar 只需要运行new_web单元就能加载其他所有单元

1.打开IDEA Tomcat配置

跟着箭头走别瞎点

启动Tomcat 运行网页

Maven多工程项目(父子)

父级的pom.xml里的依赖 子项目会继承

如果项目1 想要使用 项目2的东西 那么需要将项目2的依赖导入项目1里 pom.xml

注意:如果将子项目的依赖都放入到父级的pom.xml中 这样写确实方便了但是 会发生
Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [order_dao,order_utils,order_service,order_domain,order_web] are excluded from annotation processing

意思就是说 [order_dao,order_utils,order_service,order_domain,order_web]
这些依赖形成了 互相依赖,类似死循环

或者
Could not find artifact org.example:order_entity:pom:1.0-SNAPSHOT

意思就是找不到 order_entity 这个项目的jar

为什么会发生这样的情况?

比如项目1 里调用了 项目二 里的一个类 而项目三里也调用了 项目二 里的一个类

那么在加载父级 pom.xml 的时候就会发生 撞头

项目一需要将父级里的 pom.xml 项目二打包到自己的jar里

项目二需也要将父级里的 pom.xml 项目二打包到自己的jar里 那么问题来了谁先执行了? 在Maven中这些都是同时运行的 也就是 会造成资源竞争

死循环 谁也不让谁 一直持续下去 导致谁也没成功

解决办法就是 在子类自己的pom.xml中导入需要的项目依赖 而不是都放入到父级的pom.xml中

创建步骤

和同级工程项目 类似但是 不是创建一个空的目录了 而是创建一个Maven项目然后在项目里包含子项目

第一步创建父级项目

后面就傻瓜操作就行了 如果有什么不懂得 看上面的 /*/多工程项目(同级)//*案例里有介绍

注意:创建完在右下角会弹出来选项: 一定要选择 Enable Auto import 否则各种错误

第二部创建子项目

和同级多工程项目一样的道理 如果看不懂去上面找 有详细的

添加完需要的子级目录后点击apply 后就会形成以下结构

使用方法

使用IDEA Tomcat运行项目参考 上面的 同级多工程项目

将项目打包成war 打包的是order_web 但是war文件名称是父级名称 但是内容还是order_web内容

打包后的Maven (父/子) 全部依赖 都会保存在lib里 自动创建的

我们将war 放到Tomcat服务器 webapps里 运行后 看看 怎么样 别告诉我你不会使用Tomcat(那么你可以去补一补基础了)

看到lib吗 将Maven(父和子) pom.xml 坐标里的jar全部 保存到lib里了(lib内容jar太多这里就不复制了偷点懒)

点击查询产品

出现上图证明war包没有问题

相关文章