SSM搭建过程中,许多的jar包需要管理,现实工作中采用的也大多是Maven的管理方式。因此在这个系列中穿插这三篇的Maven的概述,很多东西我直接就从IDE入手,如果有想深入了解maven的,可以搜索教程,从dos界面入手,对Maven会有个更深刻的了解。
接下来三章分别的内容是,Maven的入门,从基础知识到第一个案例,再到web项目的Maven管理,最后是基于Maven的Spring mvc管理。
文章主题采用博主林炳文Evankaka原创文章,中间加入自己理解及学习中遇到的细节。
一、初步了解maven.
Maven是一个采用纯Java编写的开 源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,Maven可以管理项目的整个声明周期,包括编 译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。而Maven本身还支持多种插件,可以方便更灵活的控制 项目
1.了解maven的目录结构,在maven的构建过程中,构建的程序必须有特定的目录结构,基本的目录如下所示:
2.对于这个目录的建立,熟练的建立这个目录是必备的,但是这样无助于开发的进度,所以maven自带了一个archetype工具帮助我们自动生成项目的骨架。在cmd中切换到工程的目录,执行命令mvn archetype:generate,就是自动生成需要的目录,在生成的过程中会需要输入一些字段,在下面说明的pom.xml的时候再讲。
3.pom.xml<Project Object Model,项目对象模型>文件,这个文件可以理解为整个项目的控制文件,对于这个文件有一下几个属性需要说明。
<modelVersion> :默认是4.0.0,指定了当前POM模型的版本。
<groupId>:定义了项目属于哪一个组,这个组通常与项目所在的组织或者公司关联,如com.microsoft.myapp, com.google.myapp等等。
<artifactId>:定义了当前maven项目在组中的唯一ID,可以定义为项目的名称如:HelloWorld
<version>:指定当前的版本,如1.0-SNAPSHOT,snapshot是快照的意思,说明该项目还在开发中,是不稳定的版本。
而一般通过archetype工具生成的包名就是groupId+artifactId。
二、Maven安装过程
必备:下载maven之后,安装环境变量,跟安装java环境变量一样,所以也就不再赘述了。安装好之后运行一条命令,mvn help:system,运行之后会下载一些需要的库文件,一般是放在user/.m2/repository目录下,也就是默认的本地仓库的位置。
安装过程如下:
1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量。
2.下载maven3,下载地址:http://maven.apache.org/download.html
下载apache-maven-3.1.1-bin.zip文件后,并解压到 E:\JavaTool\apache-maven-3.3.1
3.配置maven3的环境变量:先配置M2_HOME的环境变量,新建一个系统变量:M2_HOME , 路径是:E:\JavaTool\apache-maven-3.3.1,如图所示:
4、再配置path环境变量,在path值的末尾添加"%M2_HOME%\bin",如下图所示;
5.点击确定之后,打开cmd窗口:输入 mvn -version,出现如下内容表示安装成功,注意3.1.1是对应于jdk1.7以上的版本,所以自己要看好自己电脑jdk的版本
6、配置成功后开始在Eclipse中配置Maven,点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字maven到插件Maven Integration for Eclipse 并点击安装即可,如下图:(可以直接下载J2EE的eclipse编译器。它都帮你集成好了)
选中I accept ...后,点Finish后,出现 Install Stoftware等待下载安装。
等待安装完成后,重启Eclipse后就可以看到安装完成
7、重启后,为了使得Eclipse中安装的Maven插件,同windows中安装的那个相同,需要让eclipse中的maven重新定位一下,点击Window -> Preference -> Maven -> Installation -> Add进行设置
8、给maven添加本地仓库
maven默认的仓库,是放在C:\Users\lin\.m2\repository,lin可以看成是你的用户名,如果不想放在这里,可以这么改
- 打开本地存放maven目录(或者maven安装目录,我的安装目录是:E:\JavaTool\apache-maven-3.3.1\conf,这里没多大影响,我只是不同的项目有不同的仓库):比如我的本地存放目录是:E:\JavaTool\apache-maven-3.3.1\conf
- 打开conf文件夹下的settings.xml文件,找到第53行,把注释去掉,修改成:<localRepository>D:/Util/maven/maven-dependcies</localRepository>当然了,前提是在某个路径下,手动建立了一个名为 maven-dependcies的文件夹,然后把本地仓库指向该路径。
三、新建一个简单的maven项目:maven-hellolworld
1、新建一个Maven项目
2、这里选了quickstart,
3、输入工程名,引用包名
名
4、自动生成的如下,我们不需要这
pom.xml文件 如下
<span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin.learning</groupId>
<artifactId>maven-hellowrold</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>maven-hellowrold</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
</span>
5、修改内容
将App.java改成如下
<span style="font-size:14px;">package com.lin.learning.maven_hellowrold;
/**
* Hello world!
*
*/
public class App
{
public void sayHello(){
System.out.println( "Hello World!林炳文Evankaka" );
}
}
</span>
再把AppTest.java内容改成如下
<span style="font-size:14px;">package com.lin.learning.maven_hellowrold;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
App app = new App();
app.sayHello();
}
}
</span>
6、测试运行
选 中testApp().然后以Junit的调试方式运行
运行结果:绿色表明案例通过,运行成功
7、打包输出
现在好了,可以把这个文件 打包成jar提供给其它项目使用了,项目右键-》属性
输入以下内容,开始生成 jar
最终输出结果:
表明已构建成功,去仓库看看打包成jar没
jar已打包,其它java项目都可以使用,不管是不是maven项目
四、使用maven项目
这里我要再来新建 一个maven-test项目,并且来添加上一个maven-helloworld的包,从而每次maven-helloworld更新jar包时,maven-test都不用手动去替换jar包,直接update project即可。
同样的过程,还是新建一个maven-test的项目
把app.java改成AppHello,避免和上一个重名
同时将AppHello.java内容改成如下
<span style="font-size:14px;">package com.lin.learning.maven_test;
import com.lin.learning.maven_hellowrold.App;
/**
* Hello world!
*
*/
public class AppHello
{
public static void main( String[] args )
{
App app = new App();
app.sayHello();
}
}
</span>
pom.xml文件 添加maven-helloworld的jar包依赖
<span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin.learning</groupId>
<artifactId>maven-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>maven-test</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.lin.learning</groupId>
<artifactId>maven-hellowrold</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
</span>
接着,更新下整个maven 工程
选中强制更新
更新好了,直接选中AppHello的main,然后右键运行,输出了结果
如果,这时maven-helloworld更改了内容,比如它的App.java更改成如下。添加一个方法
<span style="font-size:14px;">package com.lin.learning.maven_hellowrold;
/**
* Hello world!
*
*/
public class App
{
public void sayHello(){
System.out.println( "Hello World!林炳文Evankaka" );
}
public void sayAll(){
System.out.println( "我是林炳文Evankaka、林炳文Evankaka、林炳文Evankaka、林炳文Evankaka、林炳文Evankaka " );
}
}</span>
这里,maven-test也要用到这个sayall方法。
同理,直接maven->update project就会自动引入新的jar包
然后调用方法如下:
<span style="font-size:14px;">package com.lin.learning.maven_test;
import com.lin.learning.maven_hellowrold.App;
/**
* Hello world!
*
*/
public class AppHello
{
public static void main( String[] args )
{
App app = new App();
app.sayHello();
app.sayAll();
}
}
</span>
输出结果