maven应用详解 及构建ssh项目(四)

来源:互联网 发布:angular.js介绍 编辑:程序博客网 时间:2024/05/21 18:16

1.  maven应用详解

maven核心概念

l 仓库

l 坐标

l 依赖

多模块&继承

l 生命周期

l 插件

 

1.1.  仓库

仓库分为 本地仓库、远程仓库、中央仓库

Maven内置了远程公用仓库:http://repo1.maven.org/maven2

用户编写pom.xml继承 超级POM文件 (有效POM =超级POM + pom.xml

超级POM里有一些默认的插件,和一些配置和 pom.xml合成有效POM 

eclipse中



 

远程仓库:网络中服务器 (私服

当公司开发项目,这些项目没有开源,在公司内部搭建私服,公司员工通过私服共享项目。 (中央仓库存放公共开源项目 ),如果要使用私服,超级POM没有定义,需要在pom.xml(settings.xml )配置私服

还有安全控制, 缓存中央仓库jar作用

 

顺序: 本地仓库 ---私服----中央仓库

 

1.2.  坐标


自己编写pom.xml继承 超级POM,两个pom内容合并称为 有效POM 

  坐标 groupIdartifactIdversion )可以在仓库中唯一定位项目的位置

在安装项目 repository/groupId/artifactId/version/xxx.jarxxx.war

  打包方式(packaging) ,项目在打包后,产生怎么样类型文件pom,jar,maven-plugin,ejb,war,ear,rar,par

jar 将项目制作为jar包,被其它项目依赖  war独立运行javaweb项目,pom被其它项目继承  

 

1.3.  依赖(重点!!!

1.3.1.  使用坐标导入jar

在开发中,项目需要依赖各种各样的框架(项目),坐标可以作为项目唯一标识,通过坐标进行依赖项目引入

 

问题: 如何获得需要项目的坐标??

方法一: 网站搜索

• http://search.maven.org/

• http://mvnrepository.com/

log4j为例

 

方法二: 索引搜索

junit4 为例

开启maven 仓库视图

先对仓库建立索引

 

 

 

导入的jar包如果本地仓库不存在,去中央仓库下载 !


eclipse中依赖视图


 

1.3.2.  dependency元素详细分析

<dependency>

      <groupId>……</groupId>

      <artifactId>……</artifactId>

      <version>……</version>

      <classifier>……</classifier>

      <scope>是用来指定当前包的依赖范围,maven的依赖范围</scope>

      <type>默认为jar类型,常用的类型有:jar,ejb-client,test-jar...,可设置plugins中的extensions值为true后在增加 新的类型,</type>

      <systemPath>……</systemPath>

      <optional>设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。</optional>

      <exclusions>如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion.</exclusions>

</dependency>

n exclusions:排除传递依赖 (主要解决jar冲突问题 )

 

<dependency>

   <groupId>org.apache.struts</groupId>

   <artifactId>struts2-core</artifactId>

   <version>2.3.8</version>

   <!-- 排除依赖 asm ---如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion.-->

   <exclusions>

   <exclusion>

   <artifactId>asm</artifactId>

   <groupId>asm</groupId>

   </exclusion>

   </exclusions>

   </dependency>

 scope 依赖范围 ,导入jar在生命周期哪个节点起作用

 

 compile:编译范围,默认scope,classpath中存在 (存活整个生命周期)

 provided:已提供范围,比如容器提供Servlet API(不参与打包码,只参与编译测试)

<dependency>

   <groupId>javax.servlet</groupId>

   <artifactId>servlet-api</artifactId>

   <version>2.5</version>

   <scope>provided</scope>

   </dependency>

   <dependency>

   <groupId>javax.servlet</groupId>

   <artifactId>jsp-api</artifactId>

   <version>2.0</version>

   <scope>provided</scope>

</dependency>

 runtime:运行时范围,编译不需要,接口与实现分离 (不参与编译,参与打包)

 test:测试范围,单元测试环境需要 (只在测试时使用)

<dependency>

   <groupId>junit</groupId>

   <artifactId>junit</artifactId>

   <version>4.9</version>

   <scope>test</scope>

</dependency>

 system:系统范围,自定义构件,指定systemPath(引入外部系统的jar包)

 

 

 

1.3.3.  传递性依赖

在导入项目A ,如果项目A依赖项目BB也会自动导入

 

B-C-X(1.5)

A-D-X(2.0)

问题: 导入X哪个版本?

哪个先声明,就导入哪个版本 ,如果A在前2.0, 如果B在前1.5

 

技巧:

1、 版本统一维护

<properties>

    <spring.version>3.2.0.RELEASE</spring.version>

</properties>

 

<!-- 导入spring -->

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-core</artifactId>

   <version>${spring.version}</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-beans</artifactId>

   <version>${spring.version}</version>

   </dependency>

2、 防止传递性依赖导入冲突

<!-- 路径最短,优先导入-->

   <dependency>

   <groupId>commons-logging</groupId>

   <artifactId>commons-logging</artifactId>

   <version>1.1.1</version>

   </dependency>

 

如果不是传递性依赖,导入两个相同坐标,不同版本,后导入坐标覆盖了之前的坐标

 

1.4.  综合练习--- 基于maven构建SSH项目

新建maven web项目

 

 

  ssh整合后项目 web.xml 复制maven项目

 使用坐标导入jar

<properties>

   <spring.version>3.2.0.RELEASE</spring.version>

   <struts2.version>2.3.15.2</struts2.version>

   <hibernate.version>3.6.10.Final</hibernate.version>

  </properties>

 

<dependencies>

   <!-- 导入struts2 -->

   <dependency>

   <groupId>org.apache.struts</groupId>

   <artifactId>struts2-core</artifactId>

   <version>${struts2.version}</version>

   </dependency>

   <!-- 导入spring -->

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-context</artifactId>

   <version>${spring.version}</version>

   </dependency>

      <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-aspects</artifactId>

   <version>${spring.version}</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-orm</artifactId>

   <version>${spring.version}</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-web</artifactId>

   <version>${spring.version}</version>

   </dependency>

   <dependency>

   <groupId>org.springframework</groupId>

   <artifactId>spring-test</artifactId>

   <version>${spring.version}</version>

   </dependency>

   <!-- 导入struts2整合spring插件  -->

   <dependency>

   <groupId>org.apache.struts</groupId>

   <artifactId>struts2-spring-plugin</artifactId>

   <version>${struts2.version}</version>

   </dependency>

<!-- 导入hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>${hibernate.version}</version>

</dependency>

<!-- log4j -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.7.2</version>

</dependency>

<!-- c3p0 -->

<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

<version>0.9.1.2</version>

</dependency>

<!-- mysql 驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.6</version>

</dependency>

<!-- servletjsp -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>2.0</version>

<scope>provided</scope>

</dependency>

<!-- junit -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>

  </dependencies>

 将页面复制 src/main/webapp 目录

 将配置文件复制 src/main/resources

 将源码复制 src/main/java

 将测试代码复制src./test/java

注意 hbm.xml也是配置文件 !!!!!

 

 测试下面命令(关联源码)

• dependency:sources -U 

0 0
原创粉丝点击