热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

maven子module与工程管理

实际项目过程中,我们的工程往往是多个模块组合在一起,甚至相互之间也会有依赖关系,如何管理好这些依赖是一个很重要的技能。举个简单的场景&#x

  实际项目过程中,我们的工程往往是多个模块组合在一起,甚至相互之间也会有依赖关系,如何管理好这些依赖是一个很重要的技能。

  举个简单的场景,web工程mavenWeb与java工程mavenJava都属于一个项目里的模块,而且mavenWeb依赖于mavenJava,通常,我们会建立一个父pom来管理这样的工程。

---------------------------->

  绝大多数时候我都会直接用eclipse插件所提供的快速建maven工程来选择新建web或者java,但命令还是很重要的。创建过程中遇到了问题:

mvn archetype:create -DgroupId=com.changjiang.test -DartifactId=mavenJava -DpackageName=com.changjiang.test

但出现报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create (default-cli) on project standalone-pom: Unable to pars
e configuration of mojo org.apache.maven.plugins:maven
-archetype-plugin:2.4:create for parameter #: Abstract class or interface 'org.apache.maven
.artifact.repository.ArtifactRepository' cannot be instantiated -> [Help 1]

参照了网上的解决方案:

* JAVA_HOME没有设置或者设置有误、m2_home设置有误
* 删除/org/apache/maven/plugins/下的maven-archetype-plugin
* archetype:create命令已经过期,需要使用 archetype:generate 来进行代替(方案可行)
* maven-archetype-plugin 2.3版本的插件有问题,换其它版本进行创建(方案可行)

于是改用generate替代create(maven版本3.0.5),命令行交互mode出现,选择一些基本信息后,创建成功:

mvn archetype:generate -DgroupId=com.changjiang.test -DartifactId=mavenJava -DpackageName=com.changjiang.test

---------------------------->

  接着用命令创建一个mavenWeb工程:

mvn archetype:generate -DgroupId=com.changjiang.web -DartifactId=mavenWeb -DpackageName=com.changjiang.web -DarchetypeArtifactId=maven-archetype-webapp

其过程与mavenJava类似;

 ---------------------------->

  接下来,我们将工程修改符合eclipse要求的结构:

mvn eclipse:eclipse
=====================================
mvn eclipse:eclipse -DwtpVersion=2.0

导入eclipse。结构如下:

  ---------------------------->

  如果我们不用一个父pom来管理这两个模块,那么当mavenWeb需要依赖mavenJava时,就必须在打包多次,如果有多个模块,这个操作就会非常复杂。这里引入pom对这两个模块进行管理。

...
pom1.0mavenWebmavenJavajunitjunit4.11test

子项目里:

...4.0.0com.changjiang.mavenmavenParent1.0
...

这样,只要在mavenParent中进行mvn install的操作,它就会对所有的模块进行自动打包处理。

  除了子模块的统一入口,父pom另一个作用就是依赖的遗传,设置统一的并在中标注版本,即可统一管理所有的公共依赖和它们的版本。

...CHiQ3-webCHiQ3-rest2.03.0.16.Final2.8.41.21.7.74.111.9.51.2.73.2.04.2.4.RELEASE2.0.81.8.2.RELEASE1.0.143.4.60.51.8.73.20.0-GA5.1.384.5.13.2.12.6.3UTF-81.7UTF-8UTF-83.1-b08javax.ws.rsjavax.ws.rs-api${javax.ws.rs-api.version}org.jboss.resteasyresteasy-client
...

子pom中也可以像在父pom中确定依赖的版本。

  如果各个子模块之间也有依赖关系,比如我们提到的这个场景,mavenWeb依赖于mavenJava,那么也可以在父pom中用进行管理。

 需要特别注意的是,父pom中所定义的各种参数,子pom可以用${}来引用,但是里面不能用通配符。

 ---------------------------->

  当然,父pom中的也是会被继承的。相对的,也会有可以保证子pom中所有的版本,配置一致。

  另外,对于maven依赖冲突时,maven有自己的规则来进行排序,比如同级的相同依赖,按在pom中出现的先后排序;不同级的依赖,就近原则。

  如果在继承的过程中,发现有依赖中部分的依赖不想被继承,就要用到:

...org.hibernatehibernate-core5.1.0.Finaljavax.transactionjta

---------------------------->

  在添加诸如spring等的依赖时,往往会用到一些依赖所依赖的jar包,这个时候最好能够将已经引用到,但是没有放到pom中的依赖放到pom中去。可以用mvn dependency:resolve来查询已经依赖的jar包和文件:

E:\Users\BruceChan\workspace\dev01\mavenParent>mvn dependency:resolve
[INFO] Scanning
for projects...
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] mavenParent
[INFO] mavenJava
[INFO] mavenWeb Maven Webapp
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building mavenParent
1.0
[INFO]
------------------------------------------------------------------------
[INFO]
[INFO]
--- maven-dependency-plugin:2.1:resolve (default-cli) @ mavenParent ---
[INFO]
[INFO] The following files have been resolved:
[INFO] antlr:antlr:jar:
2.7.7:compile
[INFO] com.fasterxml:classmate:jar:
1.3.0:compile
[INFO] dom4j:dom4j:jar:
1.6.1:compile
[INFO] junit:junit:jar:
4.11:test
[INFO] org.apache.geronimo.specs:geronimo
-jta_1.1_spec:jar:1.1.1:compile
[INFO] org.hamcrest:hamcrest
-core:jar:1.3:test
[INFO] org.hibernate:hibernate
-core:jar:5.1.0.Final:compile
[INFO] org.hibernate.common:hibernate
-commons-annotations:jar:5.0.1.Final:compile
[INFO] org.hibernate.javax.persistence:hibernate
-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] org.javassist:javassist:jar:
3.20.0-GA:compile
[INFO] org.jboss:jandex:jar:
2.0.0.Final:compile
[INFO] org.jboss.logging:jboss
-logging:jar:3.3.0.Final:compile
[INFO] xml
-apis:xml-apis:jar:1.0.b2:compile
[INFO]
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building mavenJava
1.0
[INFO]
------------------------------------------------------------------------
[INFO]
[INFO]
--- maven-dependency-plugin:2.1:resolve (default-cli) @ mavenJava ---
[INFO]
[INFO] The following files have been resolved:
[INFO] antlr:antlr:jar:
2.7.7:compile
[INFO] com.fasterxml:classmate:jar:
1.3.0:compile
[INFO] dom4j:dom4j:jar:
1.6.1:compile
[INFO] junit:junit:jar:
4.11:test
[INFO] org.apache.geronimo.specs:geronimo
-jta_1.1_spec:jar:1.1.1:compile
[INFO] org.hamcrest:hamcrest
-core:jar:1.3:test
[INFO] org.hibernate:hibernate
-core:jar:5.1.0.Final:compile
[INFO] org.hibernate.common:hibernate
-commons-annotations:jar:5.0.1.Final:compile
[INFO] org.hibernate.javax.persistence:hibernate
-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] org.javassist:javassist:jar:
3.20.0-GA:compile
[INFO] org.jboss:jandex:jar:
2.0.0.Final:compile
[INFO] org.jboss.logging:jboss
-logging:jar:3.3.0.Final:compile
[INFO] xml
-apis:xml-apis:jar:1.0.b2:compile
[INFO]
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building mavenWeb Maven Webapp
1.0
[INFO]
------------------------------------------------------------------------
[INFO]
[INFO]
--- maven-dependency-plugin:2.1:resolve (default-cli) @ mavenWeb ---
[INFO]
[INFO] The following files have been resolved:
[INFO] antlr:antlr:jar:
2.7.7:compile
[INFO] com.changjiang.test:mavenJava:jar:
1.0:compile
[INFO] com.fasterxml:classmate:jar:
1.3.0:compile
[INFO] dom4j:dom4j:jar:
1.6.1:compile
[INFO] javax.servlet:javax.servlet
-api:jar:3.1.0:provided
[INFO] junit:junit:jar:
4.11:test
[INFO] org.apache.geronimo.specs:geronimo
-jta_1.1_spec:jar:1.1.1:compile
[INFO] org.hamcrest:hamcrest
-core:jar:1.3:test
[INFO] org.hibernate:hibernate
-core:jar:5.1.0.Final:compile
[INFO] org.hibernate.common:hibernate
-commons-annotations:jar:5.0.1.Final:compile
[INFO] org.hibernate.javax.persistence:hibernate
-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] org.javassist:javassist:jar:
3.20.0-GA:compile
[INFO] org.jboss:jandex:jar:
2.0.0.Final:compile
[INFO] org.jboss.logging:jboss
-logging:jar:3.3.0.Final:compile
[INFO] xml
-apis:xml-apis:jar:1.0.b2:compile
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mavenParent ....................................... SUCCESS [
1.148s]
[INFO] mavenJava ......................................... SUCCESS [
0.216s]
[INFO] mavenWeb Maven Webapp ............................. SUCCESS [
0.220s]
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO]
------------------------------------------------------------------------
[INFO] Total time:
2.210s
[INFO] Finished at: Thu Aug
25 15:18:28 CST 2016
[INFO] Final Memory: 9M
/244M
[INFO]
------------------------------------------------------------------------

  ---------------------------->

对于平时用到比较多的依赖,可以整理一个专门的pom来存放这些依赖,在使用的时候,直接引用这个pom就可以了。

com.xxxxxxxxxpom

不过采用这种方式存在依赖性的问题。

  这种依赖性的问题,总体来说就是有共享的信息,多用依赖,没有共享的信息,就用多模块处理。

转:https://www.cnblogs.com/bruceChan0018/p/5793923.html



推荐阅读
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 五、RabbitMQ Java Client基本使用详解
    JavaClient的5.x版本系列需要JDK8,用于编译和运行。在Android上,仅支持Android7.0或更高版本。4.x版本系列支持7.0之前 ... [详细]
author-avatar
手机用户2502858701
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有