java之maven

上篇提到了git的使用,接下来说一下maven吧,以前都是随便在项目里直接加包,然后将依赖吧build path进项目中就ok了,自从用了maven之后瞬间感觉简便了很多,不管是对于自己还是项目组。
先说一下普通使用maven的方法:
只需要下载一个maven包,然后配置环境变量,在eclipse中配置maven的路径即可,网上这种步骤很多,参考:http://blog.csdn.net/wode_dream/article/details/38052639
这篇文章介绍的很详细,
配置好之后按照常规流程,新建maven工程->配置pop.xml中的依赖包,然后需要执行maven->update project就会把依赖包下载在本地。
(小提示:Maven其实就是在pop.xml文件上面的网址中进行下载,可以根据groupId和artifactId确定到目的;groupId其实就是代表组织和整个项目的唯一标志,其实就是唯一地址,而artifactId就是具体项目的名称;比如:

org.apache.kafka
kafka_2.10
0.9.0.0

输入网址:https://repo.maven.apache.org/maven2
一级一级查找,从org->apache->kafka,最后确定kafka_2.10;)
这种形式下,你本地仓库中若是没有该关联的依赖包时,会去互联网上根据你配置的网址进行下载;
但是,若是在公司内网不通互联网时,这时候就需要搭建maven私服来搞定了;
另外,查找依赖包时可以去maven的官网查找相对应的包(有搜索功能),你可以到Maven官方仓库网站 http://mvnrepository.com 里搜索你需要的jar包,例如:你可以搜索spring,选择你要的版本,然后将粘贴到pom.xml文件中
这里写图片描述
参考:http://www.cnblogs.com/quanyongan/archive/2013/04/24/3037589.html
在连接私服的网址,在setting文件中有个mirror标签,在这个镜像中直接添加ip地址,省的需要在每个包的url上都添加网址了;

一.知识点:
1.Goals:译为目标,意译为目标操作,如package、install等
2.Profiles:译为侧面,意译为各个环境适应性
http://elim.iteye.com/blog/1900568
http://zhaoshijie.iteye.com/blog/2094478

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流程:http://blog.csdn.net/mapdigit/article/details/7986168

7.build:不写build的话会按照默认规则打包,打成一个包
http://blog.csdn.net/tomato__/article/details/13625497
http://blog.csdn.net/xiao__gui/article/details/47341385

二、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文件中格式的代码:http://blog.csdn.net/superye1983/article/details/10106871

三、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一下就可以了;
参考:http://www.oschina.net/question/143808_156035

5.在Eclipse中使用Maven添加模块时报错:The parent project must have a packaging type of POM
解决办法:
是将pom.xml 中的 jar 改成 pom

6.之前一直不明白package与 install的区别,今天测试了下。
如果b项目依赖a项目,而a打了包(package),jar仅仅时打到了a项目的target下。这时编译b项目,还是会报错,找不到所依赖的a项目,说明b项目在本地仓库是没有找到它所依赖的a项目。然后,我install a项目这时,有以下日志,[INFO] Installing G:\projects\a\target\a-0.0.1-SNAPSHOT.jar to F:\repository\com\chenjun\a\0.0.1-SNAPSHOT\a-0.0.1-SNAPSHOT.jar
[INFO] Installing G:\projects\a\pom.xml to F:\repository\com\chenjun\a\0.0.1-SNAPSHOT\a-0.0.1-SNAPSHOT.pom,说明a项目已安装到本地仓库了,并且是jar和pom同时安装的.
这时候去compileb项目,编译通过.
总之,package是把jar打到本项目的target下,而install时把target下的jar安装到本地仓库,供其他项目使用.

安装完私服后注意添加一个外网源,参考:https://www.cnblogs.com/luotaoyeah/p/3791966.html,但是得把源改为https://repo.maven.apache.org/maven2,因为那个源里面太少包了

参考:
Maven小技巧;http://blog.csdn.net/chen3749102/article/details/52327800
http://www.cnblogs.com/EasonJim/p/6671338.html
Maven命令和eclipse上的命令
Maven命令学习
http://www.cnblogs.com/phoebus0501/archive/2011/05/10/2042511.html
http://www.cnblogs.com/adolfmc/archive/2012/07/31/2616908.html
http://www.cnblogs.com/kingfy/p/5665218.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值