上篇提到了git的使用,接下来说一下maven吧,以前都是随便在项目里直接加包,然后将依赖吧build path进项目中就ok了,自从用了maven之后瞬间感觉简便了很多,不管是对于自己还是项目组。

先说一下普通使用maven的方法:

只需要下载一个maven包,然后配置环境变量,在eclipse中配置maven的路径即可,网上这种步骤很多,参考:

这篇文章介绍的很详细,

配置好之后按照常规流程,新建maven工程->配置pop.xml中的依赖包,然后需要执行maven->update project就会把依赖包下载在本地。

(小提示:Maven其实就是在pop.xml文件上面的网址中进行下载,可以根据groupId和artifactId确定到目的;groupId其实就是代表组织和整个项目的唯一标志,其实就是唯一地址,而artifactId就是具体项目的名称;比如:


org.apache.kafka

kafka_2.10

0.9.0.0


一级一级查找,从org->apache->kafka,最后确定kafka_2.10;)

这种形式下,你本地仓库中若是没有该关联的依赖包时,会去互联网上根据你配置的网址进行下载;

但是,若是在公司内网不通互联网时,这时候就需要搭建maven私服来搞定了;

另外,查找依赖包时可以去maven的官网查找相对应的包(有搜索功能),你可以到Maven官方仓库网站 http://mvnrepository.com 里搜索你需要的jar包,例如:你可以搜索spring,选择你要的版本,然后将粘贴到pom.xml文件中

java 依赖 读取本项目maven java配置maven依赖_java 依赖 读取本项目maven


3.Snapshot/public(release):
版本分为snapshot和public版本;public是正式版本,而snapshot是快照版本,当这两种版本都发布到远程仓库上时,public版本在第一次下载到本地仓库后以后就不会去远程仓库中寻找了,而snapshot则会一直检查远程仓库上是否是最新的,从而进行替换;但这个替换也是有频率的,可以自己进行设置。

4.Pom头信息:
首先这个文件是一个xml文件,那么他里面的所有内容都符合xml语法规范,开头的这最外层同样也是一个xml文件的标签,后面那一长串也就是所谓的属性,其中xmlns表示命名空间,xmlns=”http://maven.apache.org/POM/4.0.0” 这表示默认命名空间,而下面xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写,比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation,而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName。所以你看mvn里面的这种就是默认命名空间下面的元素,最后那一行就表示把定义这个命名空间的schema文件给引用进来,好让eclipse这类型工具能够解析和验证你的xml文件是否符合语法规范。等同于。
Xmlns(xml namespace) xmlns:xsi(xml schema instance) ;
所以其实xml中引入了两个命名空间,一个是默认的,一个是xsi命名空间;而地下的xsi:schemaLocation则是xsi命名空间里面的一个元素;也算是一种规范;(既然想引用,就得按照规范来使用)。

5.项目打包类型:
项目的打包类型:pom、jar、war
项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。项目模块化可以将通用的部分抽离出来,方便重用;修改一部分代码不再是build整个项目,缩短了build时间;此外各模块都有自己的pom文件,结构更清晰。
使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packing打包类型,所有的父级项目的packing都为pom,packing默认是jar类型,如果不作配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。
而对于各个子项目,需要在其对应的pom文件开头申明对父级项目的引用,通过GAV实现。对于子项目自己的GAV配置,GV如果不配置,则会从父级项目的配置继承过来。子模块可通过dependencies标签来添加自己的依赖,此外子类项目的packing值只能是war或者jar,前面已经说过,packing默认是jar类型。如果是需要部署的项目,则需要打包成war类型,如果只是内部调用或者是作服务使用,则推荐打包成jar类型。
6.Maven流程:

7.build:不写build的话会按照默认规则打包,打成一个包

二、Mnv自己组件命令:
1.以简单搭建一个maven项目的骨架
mvn archetype:generate
mvn archetype:generate -DgroupId=com.xh.maven -DartifactId=maven_03 -Dversion=0.0.1_SNAPSHOT
3.编译源代码: mvn compile
4. 编译测试代码:mvn test-compile
5. 运行测试:mvn test
6. 产生site:mvn site
7. 打包:mvn package 注意package和install的区别
8. 在本地Repository中安装jar:mvn install
9. 清除产生的项目:mvn clean 清除上一次maven执行的结果
10. 生成eclipse项目:mvn eclipse:eclipse 将项目变为eclipse可以运行的项目,生成.project等文件。
11.清除eclipse的一些系统设置:mvn eclipse:clean
12. 生成idea项目:mvn idea:idea
13. 组合使用goal命令,如只打包不测试:mvn -Dtest package
14. 编译测试的内容:mvn test-compile
15. 只打jar包: mvn jar:jar 只生成jar包,不会生成编译文件
16. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
( -skipping 的灵活运用,当然也可以用于其他组合命令)
17.maven generate resource:生成对应pom文件中格式的代码:

三、Mvn Eclipse插件命令
Maven build是执行上一次的指令,而maven build .. 则可以自定义配置maven命令,如写上package,则为打包命令;
其它的命令都和外面mvn自己的指令一样
四、注意/问题:
1. 运行Maven是报错:No goals have been specified for this build,解决办法:pom.xml文件标签后面加上compile即可
打出来的包就会放在target文件夹下。
2.在工程的第一层目录下运行mvn package也可以成功打包,有依赖其他包时需要先打其他包;不可以直接一次性把两个包打出来的

3.注意maven下载仓库responsible的配置,以前碰过这个,用两个私服跑,不同的仓库,一个是外网,没有自己数据库的包,而自己的私服却不能下载外面的包,导致很麻烦,其实把设置中设置成一个仓库就好了;

默认仓库路径会在c:\documents and settings\administrator.m2中。

4.could not resolve dependenc ies for project
一个问题:我将一个工程A install到了本地仓库里,但是b项目依赖a项目,b项目在打包时在本地仓库中找不到a项目,a项目确实存在;这是为什么,
其实是因为它们的父类没有打包,所以先把父亲模块install一下就可以了;