Maven的继承与聚合

maven继承管理 让版本的管理只在一个地方改变

 modules用于聚合,把执行的项目都放到同一的地方用module包括,可以省去一个个项目去mvn install,这样可以所有项目一次聚合 mvn install

传递性依赖原则:

A-->B
A-->C

1.路径最近者优先
2.路径相同,第一声明者优先

注意:
1.dependencyManagement中定义的依赖子module不会共享
2.dependencies中定义的依赖子module可以共享

dependencyManagement的使用 就是方便管理版本,子项目中要引入group id和atifact id

一、聚合

  如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合

1.1、聚合配置代码

1 <modules>
2       <module>模块一</module>
3       <module>模块二</module>
4       <module>模块三</module>
5 </modules>

  例如:对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合

1 <modules>
2       <module>../Hello</module>  
3       <module>../HelloFriend</module>        
4       <module>../MakeFriends</module>
5 </modules>

  其中module的路径为相对路径。

二、继承

  继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptId,version等

2.1、继承配置代码

1 <parent>  
2          <groupId>me.gacl.maven</groupId>
3          <artifactId>ParentProject</artifactId>
4          <version>0.0.1-SNAPSHOT</version>
5          <relativePath>../ParentProject/pom.xml</relativePath>  
6 </parent>

2.2、继承代码中定义属性

  继承代码过程中,可以定义属性,例如:

1 <properties>
2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3     <junit.version>4.9</junit.version>
4     <maven.version>0.0.1-SNAPSHOT</maven.version>
5 </properties>

  访问属性的方式为${junit.version},例如:

1 <dependency>
2     <groupId>junit</groupId>
3     <artifactId>junit</artifactId>
4     <version>${junit.version}</version>
5     <scope>test</scope>
6 </dependency>    

2.3、父模块用dependencyManagement进行管理

复制代码
 1 <dependencyManagement>
 2     <dependencies>
 3     <dependency>
 4         <groupId>junit</groupId>
 5         <artifactId>junit</artifactId>
 6         <version>${junit.version}</version>
 7         <scope>test</scope>
 8     </dependency>    
 9     <dependency>
10             <groupId>cn.itcast.maven</groupId>
11             <artifactId>HelloFriend</artifactId>
12             <version>${maven.version}</version>
13             <type>jar</type>
14             <scope>compile</scope>
15        </dependency>
16      </dependencies>
17 </dependencyManagement>
复制代码

  这样的好处是子模块可以有选择行的继承,而不需要全部继承。

dependencies 和 dependencyManagement 的区别在于:

前者,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项。

后者,如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的;只有在子项目中写了该依赖项,才会从父项目中继承该项,并且version 和 scope 都读取自 父pom。

三、聚合与继承的关系

  聚合主要为了快速构建项目,继承主要为了消除重复

四、聚合与继承实战演练

  创建四个Maven项目,如下图所示:

   

  这四个项目放在同一个目录下,方便后面进行聚合和继承

  

  Parent项目是其它三个项目的父项目,主要是用来配置一些公共的配置,其它三个项目再通过继承的方式拥有Parent项目中的配置,首先配置Parent项目的pom.xml,添加对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合以及jar包依赖,pom.xml的配置信息如下:

  Parent项目的pom.xml配置

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4 
 5     <groupId>me.gacl.maven</groupId>
 6     <artifactId>Parent</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>pom</packaging>
 9 
10     <name>Parent</name>
11     <url>http://maven.apache.org</url>
12     
13     <!-- 对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合 -->
14     <modules>
15         <module>../Hello</module>
16         <module>../HelloFriend</module>
17         <module>../MakeFriends</module>
18     </modules>
19     
20     <!-- 定义属性 -->
21     <properties>
22         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23         <junit.version>4.9</junit.version>
24         <maven.version>0.0.1-SNAPSHOT</maven.version>
25     </properties>
26 
27    <!--定义了依赖的关系,让其他项目继承这些包,不用写版本,同一控制了-->
28     <dependencyManagement>
29         <!-- 配置jar包依赖 -->
30         <dependencies>
31             <dependency>
32                 <groupId>junit</groupId>
33                 <artifactId>junit</artifactId>
34                 <!-- 访问junit.version属性 -->
35                 <version>${junit.version}</version>
36                 <scope>test</scope>
37             </dependency>
38             <dependency>
39                 <groupId>me.gacl.maven</groupId>
40                 <artifactId>Hello</artifactId>
41                 <!-- 访问maven.version属性 -->
42                 <version>${maven.version}</version>
43                 <scope>compile</scope>
44             </dependency>
45             <dependency>
46                 <groupId>me.gacl.maven</groupId>
47                 <artifactId>HelloFriend</artifactId>
48                 <!-- 访问maven.version属性 -->
49                 <version>${maven.version}</version>
50             </dependency>
51         </dependencies>
52     </dependencyManagement>
53 </project>
复制代码

  在Hello项目的pom.xml中继承Parent项目的pom.xml配置

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   
 4   <modelVersion>4.0.0</modelVersion>
 5   <artifactId>Hello</artifactId>
 6   
 7       <!-- 继承Parent项目中的pom.xml配置 -->
 8        <parent>  
 9           <groupId>me.gacl.maven</groupId>
10          <artifactId>Parent</artifactId>
11           <version>0.0.1-SNAPSHOT</version>
12           <!-- 使用相对路径 -->
13         <relativePath>../Parent/pom.xml</relativePath>  
14     </parent>
15       <!--不用写版本  parent那里同一控制了-->
16     <dependencies>
17         <dependency>
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20         </dependency>
21     </dependencies>
22 </project>
复制代码

  在HelloFriend项目的pom.xml中继承Parent项目的pom.xml配置

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <artifactId>HelloFriend</artifactId>
 5     <name>HelloFriend</name>
 6     
 7     <!-- 继承Parent项目中的pom.xml配置 -->
 8     <parent>
 9         <groupId>me.gacl.maven</groupId>
10         <artifactId>Parent</artifactId>
11         <version>0.0.1-SNAPSHOT</version>
12         <relativePath>../Parent/pom.xml</relativePath>
13     </parent>
14     <dependencies>
15         <dependency>
16             <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
17             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20         </dependency>
21         <!-- HelloFriend项目中使用到了Hello项目中的类,因此需要添加对Hello.jar的依赖 
22         Hello.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
23         因此这里也可以省略不写了
24         -->
25         <dependency>
26             <groupId>me.gacl.maven</groupId>
27             <artifactId>Hello</artifactId>
28         </dependency>
29     </dependencies>
30 </project>
复制代码

  在MakeFriends项目的pom.xml中继承Parent项目的pom.xml配置

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <artifactId>MakeFriends</artifactId>
 5     <!-- 继承Parent项目中的pom.xml配置 -->
 6     <parent>
 7         <groupId>me.gacl.maven</groupId>
 8         <artifactId>Parent</artifactId>
 9         <version>0.0.1-SNAPSHOT</version>
10         <relativePath>../Parent/pom.xml</relativePath>
11     </parent>
12     <dependencies>
13         <dependency>
14         <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
15             可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
16             <groupId>junit</groupId>
17             <artifactId>junit</artifactId>
18         </dependency>
19         <dependency>
20         <!-- MakeFriends项目中使用到了HelloFriend项目中的类,因此需要添加对HelloFriend.jar的依赖 
21         HelloFriend.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
22         因此这里也可以省略不写了
23         -->
24             <groupId>me.gacl.maven</groupId>
25             <artifactId>HelloFriend</artifactId>
26         </dependency>
27     </dependencies>
28 </project>
复制代码

  以上的四个项目的pom.xml经过这样的配置之后,就完成了在Parent项目中聚合Hello、HelloFriend、MakeFriends这三个子项目(子模块),而Hello、HelloFriend、MakeFriends这三个子项目(子模块)也继承了Parent项目中的公共配置,这样就可以使用Maven一次性构建所有的项目了,如下图所示:

  

  选中Parent项目的pom.xml文件→【Run As】→【Maven install】,这样Maven就会一次性同时构建Parent、Hello、HelloFriend、MakeFriends这四个项目,如下图所示:

  

转载自:http://www.cnblogs.com/xdp-gacl/p/4058008.html

### 光流法C++源代码解析应用 #### 光流法原理 光流法是一种在计算机视觉领域中用于追踪视频序列中运动物体的方法。它基于亮度不变性假设,即场景中的点在时间上保持相同的灰度值,从而通过分析连续帧之间的像素变化来估计运动方向和速度。在数学上,光流场可以表示为像素位置和时间的一阶导数,即Ex、Ey(空间梯度)和Et(时间梯度),它们共同构成光流方程的基础。 #### C++实现细节 在给定的C++源代码片段中,`calculate`函数负责计算光流场。该函数接收一个图像缓冲区`buf`作为输入,并初始化了几个关键变量:`Ex`、`Ey`和`Et`分别代表沿x轴、y轴和时间轴的像素强度变化;`gray1`和`gray2`用于存储当前帧和前一帧的平均灰度值;`u`则表示计算出的光流矢量大小。 #### 图像处理流程 1. **初始化和预处理**:`memset`函数被用来清零`opticalflow`数组,它将保存计算出的光流数据。同时,`output`数组被填充为白色,这通常用于可视化结果。 2. **灰度计算**:对每一像素点进行处理,计算其灰度值。这里采用的是RGB通道平均值的计算方法,将每个像素的R、G、B值相加后除以3,得到一个近似灰度值。此步骤确保了计算过程的鲁棒性和效率。 3. **光流向量计算**:通过比较当前帧和前一帧的灰度值,计算出每个像素点的Ex、Ey和Et值。这里值得注意的是,光流向量的大小`u`是通过`Et`除以`sqrt(Ex^2 + Ey^2)`得到的,再乘以10进行量化处理,以减少计算复杂度。 4. **结果存储阈值处理**:计算出的光流值被存储在`opticalflow`数组中。如果`u`的绝对值超过10,则认为该点存在显著运动,因此在`output`数组中将对应位置标记为黑色,形成运动区域的可视化效果。 5. **状态更新**:通过`memcpy`函数将当前帧复制到`prevframe`中,为下一次迭代做准备。 #### 扩展应用:Lukas-Kanade算法 除了上述基础的光流计算外,代码还提到了Lukas-Kanade算法的应用。这是一种更高级的光流计算方法,能够提供更精确的运动估计。在`ImgOpticalFlow`函数中,通过调用`cvCalcOpticalFlowLK`函数实现了这一算法,该函数接受前一帧和当前帧的灰度图,以及窗口大小等参数,返回像素级别的光流场信息。 在实际应用中,光流法常用于目标跟踪、运动检测、视频压缩等领域。通过深入理解和优化光流算法,可以进一步提升视频分析的准确性和实时性能。 光流法及其C++实现是计算机视觉领域的一个重要组成部分,通过对连续帧间像素变化的精细分析,能够有效捕捉和理解动态场景中的运动信息
微信小程序作为腾讯推出的一种轻型应用形式,因其便捷性高效性,已广泛应用于日常生活中。以下为该平台的主要特性及配套资源说明: 特性方面: 操作便捷,即开即用:用户通过微信内搜索或扫描二维码即可直接使用,无需额外下载安装,减少了对手机存储空间的占用,也简化了使用流程。 多端兼容,统一开发:该平台支持在多种操作系统设备上运行,开发者无需针对不同平台进行重复适配,可在一个统一的环境中完成开发工作。 功能丰富,接口完善:平台提供了多样化的API接口,便于开发者实现如支付功能、用户身份验证及消息通知等多样化需求。 社交整合,传播高效:小程序深度嵌入微信生态,能有效利用社交关系链,促进用户之间的互动传播。 开发成本低,周期短:相比传统应用程序,小程序的开发投入更少,开发周期更短,有助于企业快速实现产品上线。 资源内容: “微信小程序-项目源码-原生开发框架-含效果截图示例”这一资料包,提供了完整的项目源码,并基于原生开发方式构建,确保了代码的稳定性可维护性。内容涵盖项目结构、页面设计、功能模块等关键部分,配有详细说明注释,便于使用者迅速理解并掌握开发方法。此外,还附有多个实际运行效果的截图,帮助用户直观了解功能实现情况,评估其在实际应用中的表现价值。该资源适用于前端开发人员、技术爱好者及希望拓展业务的机构,具有较高的参考使用价值。欢迎查阅,助力小程序开发实践。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值