maven详解

一.maven的pom.xml文件

<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>
  <!-- 指定了当前的pom版本 -->
  <groupId>反写的公司网址+项目名</groupId>
  <artifactId>项目名+模块名</artifactId>
  <!--第一个0表示大版本号 
      第二个0表示分支版本号
      第三个0表示小版本号
   -->
  <version>当前项目的版本号</version>
  <!--默认是jar,war,zip,pom  -->
  <packaging></packaging>
  <!--项目的描述名  -->
  <name>demo</name>
  <!-- 项目的地址-->
  <url>http://maven.apache.org</url>
  <!--项目的描述  -->
  <description></description>
  <!--开发人员列表  -->
  <developers></developers>
  <properties>
   <!-- 设置文件编码 -->
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
      <!-- 设置依赖是否可选 -->
      <optional></optional>
      <!--排除依赖传递列表,将不需要的依赖jar解除  -->
      <exclusions>
        <exclusion></exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  <!-- 依赖管理,子模块可继承共有的父类jar -->
  <dependencyManagement></dependencyManagement>
  <build>
   <!-- 插件列表 -->
   <plugins>
     <plugin>
     <groupId></groupId>
     <artifactId></artifactId>
     <version></version>
     </plugin>
   </plugins>
  </build>
</project>

1.maven的依赖范围

<scope></scope>

查阅官网,有以下几大依赖范围

compile

默认的范围,编译,运行都有效

provided

在编译和测试有效

runtime

在测试和运行有效

test

只有在测试有效

system

编译和测试有效,但是跟本地系统有关,可移植性差

import (only available in Maven 2.0.9 or later)

导入的范围:他只使用在dependencyManagerment中,表示从其他pom中导入dependcy配置

2.maven的依赖传递

举个例子

好多人都看过古惑仔.里面的人物关系一般是这样的,陈浩南跟着蒋天生混,山鸡又跟着陈浩南混
三者依赖关系:
山鸡---->陈浩南--->蒋天生

我们分别建这三个项目来说明下之间的关系



在chn项目的pom.xml添加

  <dependency>
   <groupId>com.hongxing</groupId>
   <artifactId>hongxing.jts</artifactId>
   <version>0.0.1-SNAPSHOT</version>
  </dependency>

在shanji项目的pom.xml添加

<dependency>
    <groupId>com.hongxing</groupId>
    <artifactId>hongxing.chn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 </dependency>

首先先把依赖的项目打包注入到库中,执行pom.xml的run as命令

在这里顺便提一下这几个命令:


在此之前我们要做的就是在java的jdk配置中,添加如下代码
-Dmaven.multiModuleProjectDirectory=$MAVEN_HOME


否则控制台不会输出任何信息

把有被依赖关系的jts与chn进行执行install 命令 打包注入,最后进行编译测试是否成功




如果哪一天山鸡只听南哥一人的,而不听蒋天生的,那么依赖排除

 <exclusions>
    <exclusion>
   <groupId>com.hongxing</groupId>
   <artifactId>hongxing.jts</artifactId>
   <version>0.0.1-SNAPSHOT</version>
    </exclusion>
    </exclusions>




3.maven的依赖冲突

短路优先原则:jts的pom里有commons-io的2.5的版本,chn的pom里有commons-io的2.6版本,同样是这种jar包但是不同版本,shanji直接依赖于chn,所以他继承的版本也是2.6。

同级谁前谁优先:
      也就是shanji同时依赖chn与jts,如果在shanji的pom里,先dependency谁,jar包就是依赖谁的

alt+f5更新项目




4.maven的依赖聚合与继承

聚合:
<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>
  <groupId>com.hongxing</groupId>
  <artifactId>hongxing.juhe</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>hongxing.juhe</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
   <modules>
   <module>../hongxing.chn</module>
  <module>../hongxing.jts</module>
  <module>../hongxing.shanji</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


继承:

就跟我们学的java一样,减少代码率,把相同的部分给抽取出来成为一个父类.在maven中就是每个项目有相同的依赖,可以把他们抽取成一个父依赖,然后别的区继承他就行

例子:
   父依赖:

<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>

  <groupId>com.hongxing</groupId>
  <artifactId>hongxing.parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>hongxing.parent</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
<dependencyManagement>
 <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
</project>

子依赖:

 需要在子类的pom.xml文件里添加如下
<parent>
<groupId>com.hongxing</groupId>
  <artifactId>hongxing.parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</parent>

5.构建maven的web项目

第一步:新建maven project到这里更改为webapp

   


第二步:finish后,index会报错,这里原因是我们没有导入servlet的api,在pom.xml文件里添加

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>


第三步:自行添加文件夹


在这上面直接添加不进去,可以在下面的src里添加一样的

第四步:检查文件的输出位置是是不是target

将项目buildpath后,如下图所示


第五步:

右击properties--->properject Facets

确认是否打钩

第六步:安装服务插件

(1)jetty插件
  注意:jdk版本要与插件版本兼容,我用9点多版本就与jdk1.7不兼容
 <build>
    <finalName>webdemo</finalName>
    <plugins>
    <plugin>
     <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.16.v20140903</version> 
    <!-- 在打包后执行jetty:run命令 -->
        <executions>
        <execution>
        <phase>package</phase>
        <goals>
        <goal>run</goal>
        </goals>
        </execution>
        </executions>
    </plugin>
    </plugins>
  </build>

执行jetty:run命令,即可启动该插件
测试该插件是否成功,输入localhost:8080

(2)tomcat插件

将坐标改为以下:

 <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat6-maven-plugin</artifactId>
     <version>2.1</version>

这个其实跟将他布入servlet中启动是一样的,


总结:maven由于他的方便管理性,在工作中的使用越来越多了,所以还是值得学习的




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值