`
wen147258
  • 浏览: 27238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

maven学习三部曲之二pom.xml详解

阅读更多
大家在学习pom.xml文件之前先了解一些概念:
1、POM是Project Object Module 项目对象模型,通过xml文件来描述我们的项目
2、GVA(groupId,version,artifactId)我们的项目通过这个元素来标识它的唯一性
了解完这两个概念之后,我将会通过一个项目来个大家具体讲述pom.xml文件里面的一些配置
1、首先我建立一个maven工程名为:spring_maven,其pom.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>
	<!-- 通过GVA定义唯一的项目 -->
	<groupId>com.wq</groupId>
	<artifactId>spring_maven</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>spring-maven</name>
	<description>spring maven project</description>
	<!-- 该项目中不同的模块,不同模块之间本身无任何关系 -->
	<modules>
		<module>spring_mave_dao</module>
		<module>spring_maven_service</module>
		<module>spring_maven_web</module>
	</modules>
	<properties>
		<spring.version>4.0.5.RELEASE</spring.version>
		<slf4j.version>1.7.6</slf4j.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<!-- 定义一些公共的依赖,子pom会继承全部,且会下载这些依赖,如果子类需要不同的版本的依赖,需要在子类中覆盖对应的依赖 -->
	<dependencies>
		<!--junit依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.5</version>
			<scope>test</scope>
		</dependency>
		<!-- log4j 三者的关系:slf4j->slf4j-log4j12->log4j -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
			<scope>compile</scope>
		</dependency>

		<!-- spring相关的依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>

		<!-- 一些基础包的依赖 -->
		<!-- apache 包含一些格式的编码方式如:md5,base64,hex等 -->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.8</version>
			<scope>compile</scope>
		</dependency>
		<!-- commons-lang3包中包含了一些处理基本信息的类,如对字符串,时间等的处理 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.3.2</version>
			<scope>compile</scope>
		</dependency>
		<!-- commons-collections是对java collections的扩展 -->
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.1</version>
			<scope>compile</scope>
		</dependency>

	</dependencies>
	<!-- 父pom中定义依赖管理,子pom会继承,但是不会去下载这些依赖,如果子pom中需要依赖,可以通过定义依赖的groupid和artifactid定义,这样的优势在于 
		项目中的所有的子pom的对应依赖的版本一致 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aop</artifactId>
				<version>${spring.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-tx</artifactId>
				<version>${spring.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-orm</artifactId>
				<version>${spring.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
				<scope>compile</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-asm</artifactId>
				<version>3.1.4.RELEASE</version>
				<scope>compile</scope>
			</dependency>

		</dependencies>
	</dependencyManagement>
</project>

2、在该项目中分别建立其他的三个模块为spring_maven_dao,spring_maven_service,spring_maven_web,它们的pom.xml分别为:
spring_maven_dao:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<!-- 继承父pom -->
	<parent>
		<groupId>com.wq</groupId>
		<artifactId>spring_maven</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<!-- 继承父pom中的groupId和vesion -->
	<artifactId>spring_mave_dao</artifactId>
	<packaging>jar</packaging>
	<name>spring_mave_dao Maven Mojo</name>
	<url>http://maven.apache.org</url>

	<dependencies>
		<dependency>
			<groupId>org.apache.maven</groupId>
			<artifactId>maven-plugin-api</artifactId>
			<version>2.0</version>
		</dependency>
		<!-- mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.7</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
			<scope>compile</scope>
		</dependency>

		<!-- 使用父pom中管理的依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<scope>compile</scope>
		</dependency>
		<!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> 
			<scope>compile</scope> </dependency> -->
		<!-- mysql连接 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.25</version>
			<scope>compile</scope>
		</dependency>
		<!-- c3p0数据源 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.5-pre7</version>
			<scope>compile</scope>
			<!-- 去除一些你不需要的依赖 -->
			<!-- <exclusions> <exclusion> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java</artifactId> 
				</exclusion> </exclusions> -->
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
			<scope>compile</scope>
		</dependency>

		<!-- <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> 
			<scope>compile</scope> </dependency> -->

	</dependencies>
</project>


spring_maven_service:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.wq</groupId>
		<artifactId>spring_maven</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>spring_maven_service</artifactId>
	<packaging>jar</packaging>
	<name>spring_maven_service Maven Mojo</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.apache.maven</groupId>
			<artifactId>maven-plugin-api</artifactId>
			<version>2.0</version>
		</dependency>
		<!-- 依赖spring_maven_dao -->
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>spring_mave_dao</artifactId>
			<version>${project.version}</version>
		</dependency>
	</dependencies>
</project>


spring_maven_web:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.wq</groupId>
		<artifactId>spring_maven</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>spring_maven_web</artifactId>
	<packaging>war</packaging>
	<name>spring_maven_web</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<!-- 依赖spring_maven_service -->
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>spring_maven_service</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
			<scope>compile</scope>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<!-- 设置jdk的版本 -->
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF8</encoding>
				</configuration>
				<executions>
					<execution>
						<id>default-testCompile</id>
						<phase>test-compile</phase>
						<goals>
							<goal>testCompile</goal>
						</goals>
					</execution>
					<execution>
						<id>default-compile</id>
						<phase>compile</phase>
						<goals>
							<goal>compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.1.1</version>
				<executions>
					<execution>
						<id>default-war</id>
						<phase>package</phase>
						<goals>
							<goal>war</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<!-- resin plugin -->
			<plugin>
				<groupId>com.caucho</groupId>
				<artifactId>resin-maven-plugin</artifactId>
				<version>4.0-SNAPSHOT</version>
				<configuration>
					<server>127.0.0.1</server>
					<port>8080</port>
					<user>admin</user>
					<password>admin</password>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>


各个项目之间的依赖关系是spring_maven->spring_maven_dao->spring_maven_service->spring_maven_web,下面我们来详细的分析一下这些pom.xml文件的内容:
1、spring_maven相当于父pom,我们在定义它的packaging方式定义为pom,这样我们的子pom才能继承它的pom
2、我们把子模块中需要用到的jar包可以在spring_maven中中dependencies添加这些依赖
3、把子模块中会出现但是不是所有的模块中出现的依赖定义在dependencyManagement中
4、可以通过设置properties设置我们在pom中需要用到的一些变量,比如依赖的版本号
5、在子模块中会继承所有父pom的元素。
6、我们可以在pom文件中定义一些插件
7、注意一些模块化的定义
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics