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>
<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由于他的方便管理性,在工作中的使用越来越多了,所以还是值得学习的
上一篇: MyISAM和InnoDB批量插入1万数据速度比较
下一篇: gradle项目转maven