摘要:项目根目录项目名项目版本号项目目录打包的名字二依赖管理概述通过在配置依赖坐标,会自动帮我们下载依赖的构件。关于父模块的依赖配置注意两点一般都是通过来配置所有依赖及其版本号,然后子模块,在自己的文件中声明依赖即可,不用再指定版本,以确保统一。
一、Maven 1.1 为什么写Maven
工欲善其事,必先利其器。如今Java相关开发,基本离不开Maven、Gradle、MAT、Hudson之类的玩意,所以把本文当作工具篇吧,后续有空再整理其他工具。
1.2 概述Maven是优秀的构建工具,但不仅仅是能构建,还有着强大的仓库管理、项目管理相关的功能。我这介绍这一句话,像详细了解它的所有描述或者构建工具的介绍,请自行百度谷歌或参考官网。
1.3 安装依赖JDK:下载JDK的压缩包,解压,配置环境变量JAVA_HOME=安装目录、PATH=$JAVA_HOME/bin:$PATH 即完成。
安装Maven:同样下载Maven的压缩包,解压,配置MAVEN_HOME=安装目录、PATH=$MAVEN_HOME/bin:$PATH 即完成。
检查JDK : java -version 。 检查Maven: mvn -version。
安装后需要了解的是:Maven项目最核心就是pom.xml文件(创建项目后才有),需要在项目中配置的就是配置在pom文件中,还有少数全局配置是配置在maven安装目录中conf下的setting.xml中。
官网:https://maven.apache.org/
Maven包查询:http://mvnrepository.com/ http://search.maven.org/
Maven国内镜像:http://maven.oschina.net/content/groups/public/
Maven插件查询:http://maven.apache.org/plugins/
注:国内镜像也有好些,可以自己找。因为周边大多数人都用了开源中国的镜像,所以我这边也推荐它。
1.5 创建Maven项目(1)了解创建符合maven规范的项目结构,即src/main/java、src/main/resources那套。
(2)创建pom.xml文件。
(3)命令行可以通过Archetype命令生成项目骨架。Eclipse等IDE集成Maven后也可以创建Maven项目(推荐!!! )。
(4)常用命令
maven定义了很多变量,常见的maven属性,了解下自己可用,阅读其他项目的时候可看懂。
${basedir} 项目根目录
${project.name}项目名
${project.version}项目版本号
${project.groupId}项目groupId
${project.build.directory} target目录
${project.build.finalName} 打包的名字
通过在pom.xml配置依赖坐标,Maven会自动帮我们下载依赖的构件。
Maven的依赖主要是通过groupId、artifactId和version三者一起来确定一个构件的坐标。
2.3 关于dependencyManagementjunit junit 4.10 test ....
这个标签主要起到依赖统一管理的作用。一般maven开发多个项目的时候,都会创建一个parent父模块来配置pom文件统一管理公用的东西,(下面聚合和继承就是讲这部分)。在dependencyManagement下也是通过在dependencies标签下配置依赖的,但它上面在dependencies标签配置不同。
不同之处是:在dependencyManagement中配置了,项目并不会直接下载依赖的构件,而是要在子模块或者当前模块的dependencies中进行配置,表明当前模块需要用到的依赖,但此时就不用再指定版本号了。dependencyManagement也是以此来确保各个模块对相同构件可以用同一版本,也就利于统一升级版本号等等。
三、仓库 3.1 本地仓库org.springframework spring-core 3.2.5.RELEASE org.springframework spring-core
本地仓库没啥好说的,在maven安装目录下的conf/setting.xml中配置localRepository就可以指定路径。默认路径则是在用户根目录下的.m2/repository。
作用:maven编译模块的时候,依赖的模块都会按照本地->远程(一般是私服)->中央的顺序依次查找构件。平常开发的模块也是通过mvn install安装到本地仓库,其他编译时才能使用;而如果跟其他人合作开发则要通过deploy发布到远程仓库。发布后,别人下载依赖也会将通过远程或者中央仓库下载来的构件保存到别人的本地仓库。
3.2 远程仓库D: epository
一般在项目中,会在
在pom.xml中配置远程仓库的例子如下:
repo.springsource.org repo.springsource.org-releases http://repo.springsource.org/libs-milestone-local false ... nexus TeamNexusRepository http://localhost:8081/nexus/content/groups/public true false default
另外还可以指定插件的仓库:
nexus TeamNexusRepository http://localhost:8081/nexus/content/groups/public false
在pom.xml中配置的远程仓库,只会在pom文件对应的模块有效,即使配置在parent的pom中用来被继承,那也只是当前项目各个模块有效。如果多个项目实际上都想用一样的远程仓库(实际场景就是私服),那需要在setting.xml中利用profile来进行配置。
在setting.xml中配置远程仓库的例子如下:
3.3 仓库镜像nexus central http://localhost:8081/nexus/content/groups/public/ central http://localhost:8081/nexus/content/groups/public/ nexus
除了以上配置之外,我们还可以在setting.xml里面配置仓库的镜像,一般用于当访问某个仓库的时候,可能由于网络不同或者其他原因需要转换到另外一个地址,这个时候就可以配置这个仓库的镜像。例如你想覆盖中央仓库的默认地址,可以在setting.xml里面这样配置:
maven-net-cn MavenChinaMirror http://maven.net.cn/content/groups/public/ central
这里通过
在我的项目中,由于一般会把central设置为我们的私服仓库,所以大部分情况下也就不用配置镜像了。如果确实有多个仓库的话,那确实可以用
四、插件 4.1 概述 4.2 生命周期 4.3 常见插件 4.4 例子 4.5 关于pluginManagementnexus releases http://localhost:8081/nexus/content/groups/public/ nexus snapshots http://localhost:8081/nexus/content/groups/public/
这个标签跟dependencyManagement标签一样,也是为了起到统一管理的作用,只是它统一管理了插件。跟依赖管理一样,一般也会在parent父模块来配置pom来配置pluginManagement,统一描述好插件之后,在子模块中就不用完整的配置插件已经绑定的生命周期和执行目标等等,只需要指定插件的groupId 和 artifactId就可以完成插件的引用。下面给出例子。
父模块(parent模块)的pom.xml中配置:
org.apache.maven.plugins maven-source-plugin 2.4 package jar-no-fork
其他子模块需要多带带引用插件的,可以在pom.xml中配置:
五、聚合和继承 5.1 继承org.apache.maven.plugins maven-source-plugin
先说继承吧,其实继承就是为了抽出相同的东西,然后给项目的其他模块一起共用,而不用每个模块的pom.xml文件都写很多重复的东西。如果光说重复的工作量也就算了,有个重点是类似spring-core这种多个模块都可能用到的依赖,如果每个模块都自己配置自己的依赖和版本好,那很容易就会犯错或者依赖的版本不一致导致错误等等。因此,在拆分多模块开发的时候,尽量考虑使用继承。
如何使用Maven继承呢?
(1)建立一个文件夹,只创建一个pom.xml文件即可。
(2)然后把各个模块通用的东西写到这个pom.xml中,如属性定义,工厂定义,依赖坐标定义等等。
(3)把这个pom.xml中的
(4)在各个子模块中使用
关于父模块的依赖配置注意两点:
(1)一般都是通过
(2)父项目中什么时候直接配置
聚合的作用在于可以把一个项目的多个模块一起配置,这样可以一次性编译、安装和发布多个模块。
一般项目都会把聚合和继承都会放到同一个pom.xml文件进行管理。
如何使用Maven聚合呢?
(1)建立一个文件夹,只创建一个pom.xml文件。
(2)然后在这个pom.xml文件中,把这个pom.xml中的
如果其他模块跟父pom.xml是同一层的话,如下图:
则模块的配置方式为:
六、插件开发hello-world hello-spring
待更新
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65496.html
摘要:译年你不能错过的类库后端掘金各位读者好,这篇文章是在我看过的一篇介绍文后,整理出来的。上线后平稳运行我的后端书架后端掘金我的后端书架月前本书架主要针对后端开发与架构。 【译】2017 年你不能错过的 Java 类库 - 后端 - 掘金各位读者好, 这篇文章是在我看过 Andres Almiray 的一篇介绍文后,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上...
摘要:中很多特性或者说知识点都是和面向对象编程概念相关的。在多线程中内容有很多,只是简单说明一下中初步使用多线程需要掌握的知识点,以后有机会单独再详细介绍一些高级特性的使用场景。 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经...
摘要:重度强迫症患者取消大小写敏感,让自动完成更齐全。如何为当前项目工程添加多个模块啊答对着工程右键选择通常选择,如图写在最后欢迎关注喜欢和点赞后续将推出更多的工具集教程,敬请期待。公众号回复面试,领取面试实战学习资源。 showImg(https://segmentfault.com/img/remote/1460000018862588); 前言:IntelliJ IDEA 如果说Int...
阅读 1030·2022-07-19 10:19
阅读 1803·2021-09-02 15:15
阅读 1016·2019-08-30 15:53
阅读 2661·2019-08-30 13:45
阅读 2660·2019-08-26 13:57
阅读 1992·2019-08-26 12:13
阅读 1013·2019-08-26 10:55
阅读 554·2019-08-26 10:46