欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

maven详解

程序员文章站 2022-05-04 12:49:25
...

一.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的依赖传递

举个例子

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

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

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

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

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

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

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

maven详解


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

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

maven详解


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

   maven详解


第二步: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>


第三步:自行添加文件夹
maven详解

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

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

将项目buildpath后,如下图所示
maven详解

第五步:

右击properties--->properject Facets
maven详解
确认是否打钩

第六步:安装服务插件

(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由于他的方便管理性,在工作中的使用越来越多了,所以还是值得学习的