早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档。
第一步:安装jdk,具体不详诉。
第二步:官网下载maven (http://maven.apache.org/download.html),直接解压,不用安装。目录结构如下:
|--Maven204
|-- bin
|-- conf
|-- core
|-- lib
|-- local
在conf/setting.xml中,有修改本地仓库的位置。(重要)
Maven默认的本地仓库位置是当前用户工作目录下的“.m2/repository”,使用过程中这个目录里的文件会比较多,占用空间越来越大。一般建议更换到其它磁盘目录下。如下配置,就把默认的本地仓库更改到D: /.m2/repository这个目录(这个目录结构需要自己创建好)。
如果不做任何修改,本地仓库默认在:<localRepository>~/.m2/repository</localRepository>, 修改的话,把这行代码覆盖源代码:<localRepository>D: /.m2/repository</localRepository>
Maven默认的中央仓库里的文件不全。所以,都需要自行添加其它的镜像地址。在settings.xml文件中的“<mirrors>”标签里添加如下内容:
<mirror> <id>ibiblio</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://mirrors.ibiblio.org/maven2/</url> </mirror> |
保存所做的修改,同时还需要把这个settings.xml文件复制一份到“D:/.m2”目录下。
第三步:配置环境变量:我的电脑----属性----高级----环境变量,点击“系统变量”下的新建,输入:变量名 MAVEN_HOME; 变量值d:\Maven204,在系统变量列表中找到系统变量path,打开之,在变量值中追加”;%MAVEN_HOME%\bin”,至此环境变量设置完毕。
检查一下是否已经完成安装,打开dos窗口,输入mvn –v,如果出现以下信息则表示maven2已经安装成功:
X:〉mvn –v
Maven Version 2.0.4
第四步:用maven2创建第一个java工程
1、选择一个根目录,我的java工作目录是D:\eclipse\workspace
2、打开dos窗口采用cd命令进入D:\eclipse\workspace目录下
3、输入下列指令:archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT
archetype:generate 目标会列出一系列的 archetype 让你选择。 Archetype 可以理解成项目的模型。 Maven 为我们提供了很多种的项目模型,包括从简单的 Swing 到复杂的 Web 应用。我们选择默认的 maven-archetype-quickstart ,是编号 #106
(遇到一个坑:网上很多的命令是archetype:create命令,这个是maven老版本的了,新的版本是archetype:generate)
4、遇到了几个choose a number的,直接按回车(一路按回车),出现的信息如下:(下面是只输入archetype:generate命令的信息)
[INFO] Generating project in Interactive mode (这里会卡一会儿,因为要联网获取项目模板)
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> br.com.ingenieux:elasticbeanstalk-service-webapp-archetype (A Maven Archetype Encompassing RestAssured, Jetty, Jackson, Guice and Jersey for Publishing JAX-RS-based Services on AWS' Elastic Beanstalk Service)
... (这里会自动列出很多项目模板,每种模板前面会有一个数字序号)
336: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: (直接回车)
Define value for property 'groupId': : cnblogs (可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写)
Define value for property 'artifactId': : maven-hello-world (组件名称,可暂时理解成项目名称)
Define value for property 'version': 1.0-SNAPSHOT: : (版本号,直接回车,默认1.0-SNAPSHOT)
Define value for property 'package': cnblogs: : (打包后的jar文件名,相当于.net中项目最后生成的程序集dll名称)
Confirm properties configuration:
groupId: cnblogs
artifactId: maven-hello-world
version: 1.0-SNAPSHOT
package: cnblogs
Y: : (直接回车确认)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: cnblogs
[INFO] Parameter: packageName, Value: cnblogs
[INFO] Parameter: package, Value: cnblogs
[INFO] Parameter: artifactId, Value: maven-hello-world
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS (看到这个,表示项目创建成功!)
[INFO] ------------------------------------------------------------------------
...
5、如果build success的话,会出现
因为是第一次构建项目,所有依赖的jar包都要从maven的中央仓库下载,所以需要时间等待。等以后我们的本地仓库中积累了我们常用的jar包后,我们的开发将变得非常规范和方便。^_^!!
helloworld
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
先进入刚才创建项目的根目录
cd helloworld
然后执行 mvn clean compile
这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息
yangjunmingmatoMacBook-Pro-7:maven-hello-world jimmy$ mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-hello-world 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-hello-world ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-hello-world ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/jimmy/Desktop/study/maven-hello-world/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ maven-hello-world ---
[INFO] Compiling 1 source file to /Users/jimmy/Desktop/study/maven-hello-world/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.515s
[INFO] Finished at: Wed Jan 01 19:08:32 CST 2014
[INFO] Final Memory: 10M/156M
[INFO] ------------------------------------------------------------------------
第六步、单元测试
mvn clean test
这样就能做单元测试了,so easy !
如果单元测试不通过,会提示出错信息,注意看输出。
注:从输出上可以发现,test前,会先执行compile,即先编译,再执行单元测试.
有兴趣的朋友,可以修改下/src/test/java/cnblogs/AppTest.java里的内容,把testApp()方法中的assertTrue( true );改成assertTrue( false );再跑下单元测试,看下有什么不同
第七步、项目打包
通常我们会把java项目打包成jar包或war包,maven中打包的命令为
mvn clean package
运行完后,会在target目录下生成jar包
注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包
该项目中的App.java中有main方法,可以直接运行,常规方式下,我们如果想直接运行class文件,得敲一段很长的命令,maven中不必这么复杂,先用记事本打开项目根目录下的pom.xml文件,增加下面这节内容:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
1 <build> 2 <finalName>${project.artifactId}</finalName> 3 <plugins> 4 <plugin> 5 <groupId>org.codehaus.mojo</groupId> 6 <artifactId>exec-maven-plugin</artifactId> 7 <version>1.2.1</version> 8 <executions> 9 <execution> 10 <goals> 11 <goal>exec</goal> 12 </goals> 13 </execution> 14 </executions> 15 <configuration> 16 <executable>java</executable> 17 <arguments> 18 <argument>-classpath</argument> 19 <classpath> 20 </classpath> 21 <argument>cnblogs.App</argument> 22 </arguments> 23 </configuration> 24 </plugin> 25 </plugins> 26 </build>
上述这段内容插入在</project>之前即可。
然后在命令行下,输入
mvn exec:exec
即可直接运行,下面是输出:
C:\test\maven-hello-world>mvn exec:exec
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-hello-world 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:exec (default-cli) @ maven-hello-world ---
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.175s
[INFO] Finished at: Mon Jan 13 22:35:02 CST 2014
[INFO] Final Memory: 6M/111M
[INFO] ------------------------------------------------------------------------
D:\eclipse\workspace\helloworld> mvn eclipse:eclipse
指令执行完毕后,发现多了两个文件:.classpath和.project
刚才已经生成了eclipse的工程文件,现在导入之。菜单File-import ,按“下一步”,选择工程文件导入完毕后,工程管理透视图就会出现helloworld节点了。
第三步:配置maven仓库路径打开的我们的eclipse工具。
先配置maven仓库路径
Window----Perferences-----java-----Build Path-----Classpath Variables
New一个变量的类路径。
Name :M2_REPO 注意这个名字必须要大写。
Path :F:/maven/repo 点击“Folder…”找到有本地仓库的位置
实际使用中,发现eclipse与maven之间并非整合得天衣无缝,有时候eclipse中项目图标经常会莫名其妙的出现一些红叉,以下是一些个人经验:
a) 尝试先到Dos命令行窗口,用mvn clean compile(或install)之类的命令试下能否正常编译
b) 如果a) 步骤能正常编译,在回到eclipse中,项目右击->Maven-Update Project ,通常这样就能消除红叉
c) 有时候b)步骤操作完以后,仍然会有红色感叹号或红叉,但是eclipse编译、调试都OK,这就要具体问题具体分析了,可以尝试把Problems面板调出来,逐个分析
d) 以上3个步骤都尝试无效后,最后还可以尝试 Windows -> Preferences -> Validation -> Disable All 把所有验证都关掉