我的mave学习(二)

上篇文章我大致说了什么是maven以及maven的安装,下面具体讲解maven的如何使用,在讲解过程中其实也是一个自我学习过程。

讲解maven的使用需要结合maven的u具体项目,那么首先我们创建一个

点击myeclipse 的new 找到ohthers,在其中找到maven object, 然后点击next.如图:


然后点击next到下一步



然后这一步也直接点击next



看到上面红色部分不,这表示创建两种不同的项目,上面一种表示创建一个普通的java项目,下面的wepapp表示创建一个web项目,这两种也是我们常用的,

现在,我们选择下面的一种点进去看看是什么,如图:


上面需要填三个东西,分别是 groupId,artifactId,VersionId,这三个分别代表什么呢?后面再说,现在我们先填上,如下:


然后点击finash完成创建,然后创建完成,项目是什么样子的呢?如下:


这个就是创建的项目,这个里面有个pom.xml文件,它是整个项目的核心,所有的jar都在它里面  如下:


到这里,我们又看到了这三个id  groupId artifactID version,那么他们分别什么意思?

groupId:从名字上可以看出,它表示团体,公司,小组,组织的意思,团体的约定是,它以创建这个项目的组织名称的逆向域名开头。比如apache公司下面有个项目叫做tomcat,那么这个项目的groupId就应该为org.apache开头。

artifactId表示一个项目的单独表示符,比如tomcat就是一个单独的表示符、

version 表示版本,一个项目也许会有很多版本,发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本,而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个"SNAPSHOT"的标

一个项目的 groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目记。

它们就像身份证的Id一样。

说完这个,那么我们得说一说maven的pom.xml这个配置文件。要想了解pom,我们又必须了解maven的几个新词和定义。

maven的仓库

Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。

简言之,Maven仓库能帮助我们管理构件(主要是JAR)。

本地仓库 vs. 远程仓库

运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

比如说,你的项目配置了junit-3.8的依赖,在你运行mvn test 的时候,Maven需要使用junit-3.8的jar文件,它首先根据坐标查找本地仓库,如果找到,就直接使用。如果没有,Maven会检查可用的远程仓库配置,然后逐个尝试这些远程仓库去下载junit-3.8的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。


pom.xml的继承、聚合与依赖

继承:比如说,我们搭建一个web项目,他有core web server 和dao组件,那么我们可以创建这几个maven项目,而且他们彼此关联,其中有些项目的pom配置文件是相同的,如果我们一个个配置,这是不是很麻烦,我们可以声明一个父pom,让这些pom都继承这个父pom,这样是不是很省事?这就是继承。
聚合:比如web模块中聚合了core server dao 模块。
依赖:这个最好理解,学过java的i人都知道,spring的原理之一就是依赖注入

那么再回国头来看看这个pom文件,现在我重新上传一个新的pom文件,这是当初我自己练习的小项目:
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zoujun.blog</groupId>
	<artifactId>blog</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>blog Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>3.6.4.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>3.6.4.Final</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-ehcache</artifactId>
			<version>3.6.4.Final</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-c3p0</artifactId>
			<version>3.6.4.Final</version>
		</dependency>
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.6</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.2.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>wdxy</finalName>

		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.1</version>
				<configuration>
					<!-- 注意此处的url -->
					<url>http://localhost:8080/manager/text</url>
					<server>tomcat7</server> <!-- 此处的名字必须和setting.xml中配置的ID一致 -->
					<path>/wdxy</path> <!-- 此处的名字是项目发布的工程名 -->
					<username>admin</username>
					<password>admin</password>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.1.1</version>
				<configuration>
					<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
<!-- <tomcat-users> <role rolename="admin"/> <role rolename="manager"/> <role 
	rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" 
	password="admin" roles="admin,manager,manager-gui,manager-script"/> <tomcat-users/> -->






遗憾的是当初我没用到依赖,也没用到聚合也没用到继承。因为这个项目比较小,如果是个大的项目应该是分模块的,把core,server model dao web分别弄成一个模块,然后在聚合在一起,同时,对于pom,应该提出公共的部分做父pom,然后在继承这个父pom.同时对于有依赖的加上依赖。这些等以后我有机会再真正的项目中在用到







  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值