目录

  • 继承
  • 1. 问题
  • 2. 解决思路
  • 3. 操作步骤
  • 聚合
  • 1. 为什么要使用聚合?
  • 2. 配置方法
  • 自动化部署
  • 附:如何查找依赖信息?


继承

1. 问题

因为test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
比如,我们每个工程都用了Junit组件,这个组件的依赖范围就是test。

所以我们需要统一管理各个模块工程中对junit依赖的版本。

2. 解决思路

将junit依赖统-提取到"父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。同时也便于修改。

3. 操作步骤

  1. 创建一个maven工程作为父工程。注意,打包方式为pom
    创建父工程:
  2. maven 子工程直接打包找不到父工程依赖_java

  3. 在子工程中声明对父工程的引用
<!-- 子工程中声明父工程 -->
<parent>
	<groupId>com.veeja.maven</groupId>
	<artifactId>Parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<!-- 以当前文件为基准的父工程的pom.xml文件的相对路径 -->
	<relativePath>../Parent/pom.xml</relativePath>
</parent>
  1. 将子工程的坐标中与父工程坐标中重复的内容删除
  2. maven 子工程直接打包找不到父工程依赖_tomcat_02

  3. 我们可以看到在子工程中设置了相应的坐标之后,有些重复的内容就报警告了,我们删除掉这些内容就行了。
  4. 在父工程中统一Junit的依赖
<!--配置依赖的管理 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
  1. 在子工程中删除Junit依赖的版本号
    我们在配置完上一步后,就会发现,在子工程中的Junit依赖配置也会报警告:

    我们也把这一行删掉就可以了。
    形成:
<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>

这样我们就完成了对依赖版本的统一,我们修改父工程的依赖版本,相应的字版本的依赖信息也会改变。


聚合

1. 为什么要使用聚合?

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。
修改源码后也需要逐个手动进行clean操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。

2. 配置方法

我们可以在一个总的聚合工程中配置各个参与聚合的模块。
例如,在Parent中,配置我们之前写的三个工程:

<!-- 配置聚合 -->
<modules>
	<module>../HelloMaven</module>
	<module>../HelloFriend</module>
	<module>../MakeFriends</module>
</modules>

使用方式:在聚合工程的pom.xml上右键进行相应的run asmaven … 就可以了。


自动化部署

我们在完成一个maven的web项目后是需要部署到web容器(Tomcat)的。我们可以手动的执行package命令,然后发到服务器,也可以在eclipse中直接运行,但是实际上,我们可以进行配置,让它自动化的去部署一个项目。

配置如下,以及详细的解释我都放在注释里面:

<!-- 配置当前工程构建过程中的特殊设置 -->
<build>
	<!-- 工程最终的名字 -->
	<finalName>webDemo</finalName>
	
	<!-- 配置构建过程中需要使用的插件 -->
	<plugins>
		<plugin>
			<!-- cargo是一个专门从事开发“启动Servlet容器”的组织 -->
			<groupId>org.codehaus.cargo</groupId>
			<artifactId>cargo-maven2-plugin</artifactId>
			<version>1.2.3</version>
			
			<!-- 针对这个插件进行的配置 -->
			<configuration>
				<!-- 配置当前系统中容器的位置 -->
				<container>
					<containerId>tomcat7x</containerId>
					<home>E:\Tomcat7\apache-tomcat-7.0.94</home>
				</container>
				<configuration>
					<type>existing</type>
					<home>E:\Tomcat7\apache-tomcat-7.0.94</home>
					<!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
					<!-- 
						<properties>
							<cargo.servlet.port>8989</cargo.servlet.port>
						</properties> 
					-->
				</configuration>
			</configuration>
			
			<!-- 配置插件在什么情况下执行 -->
			<executions>
				<execution>
					<id>cargo-run</id>
					<!-- 生命周期的阶段 -->
					<phase>install</phase>
					<!-- 插件的目标 -->
					<goals>
						<goal>run</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

我们在命令行进入对应的目录,并且输入mvn deploy命令就可以一键部署了。

maven 子工程直接打包找不到父工程依赖_maven_03


附:如何查找依赖信息?

我们给出了一些依赖信息,但是有很多是我们不知道的,我们想用的话,可以去

http://mvnrepository.com 搜索相关的依赖信息。

maven 子工程直接打包找不到父工程依赖_ci_04


END.