setting.xml的基本配置Eclipse中Maven的基本使用
setting.xml的基本配置Eclipse中Maven的基本使用
本文主要为笔记和一些Maven的基本操作记录,方便以后的知识回顾,也可供他人学习和参考。
查询依赖信息:http://mvnrepository.com/
前提已经安装好maven,在控制台中输入java -version和mvn -v命令可以显示出对应信息。如果不能显示可以参考一下我的上一篇文章Maven的安装与环境变量配置或者自行百度
1.setting.xml的基本配置
主要在原文件中修改地方有3处
① 添加本地仓库位置目录
我的本地仓库位置为E:\Maven\mavenwarehouse,改为自己本地仓库的位置,这里需要用到localRepository标签。本地仓库就是指Maven在本地存储构件的地方,也就是存放jar包的地方,下载包时Maven会从远程仓库(*仓库)下载到本地仓库中,然后在从本地仓库引入到项目中。
<localRepository>E:\Maven\mavenwarehouse</localRepository>
②添加远程仓库的镜像
如果仓库x中的所有内容都能从仓库y中获取,那么我们就称y为x的镜像,换句话说,也就是任何x仓库能获取到的内容,我们都能够从它的镜像中获取,可以用镜像仓库来替代*仓库。在setting.xml中可以加入以下代码,我这里用的国内镜像阿里云,下载速度较其他为最快的
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
③配置默认jdk环境,我这里版本为jdk1.8,profile标签应在profiles标签内
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
到此setting基本配置已经完成,可以在cmd中输入指令:mvn help:system。会自行下载一些对以后编程有帮助的jar包。最后运行成功后。本地仓库中会多出来很多文件夹。
2.Eclipse中Maven的基本使用
创建Maven工程
选择Maven Project
点击next后出现如下窗口,建议大家勾选Create a simple project 创建一个简单的Maven项目
然后点击next会出现如下窗口,填写Group Id 和Artifact Id来指定坐标,Version不用修改,下面的Packaging需要注意一下,点开下拉框有jar、pom、war三个选项,他们分别指创建Java项目、创建Maven工程、创建web工程。我这里创建的为web工程,如下图
点击Finish创建出一个Maven工程,基本目录结构也自动创建好了但是发现报了一个错。
该错是因为web项目中没有web.xml而报错,解决办法如下:
右击项目名称→Properties→Project Facets 看到Dynamic Web Model左边打着对勾
先把对勾去掉→点击Apply→再把对勾打上可以看见窗口下面多出了一行背景颜色为黄色的链接
点击链接弹出一个小窗口,修改Context directory为src/main/webapp目录
点击ok→点击Apply→点击Apply and Close,然后发现不报错了,并且在src下多出了一些文件夹以及之前没有的web.xml
这里还有一个问题就是在webapp下创建一个jsp文件,jsp中左上角的<@符号部分会有红色波浪线,如图:
原因:没有引入Tomcat
解决方法一:
右击项目名称→Build Path→Configure Build Path→Add Library→Server Runtime→选择Tomcat路径→Finish→Apply→Apply and Close 如图:
解决方法二:
直接在pom.xml文件中添加ServletAPI,添加下面语句即可。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
项目自动添加jar包
在pom.xml中添加语句,如引入spring-core的jar包,对于不知道想要导入的jar包如何写对应语句的可以点击超链接 搜索需要的 jar 包的依赖信息
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
而后等待几秒钟Maven就会自动将相应的jar包导入到项目中,发现在maven Dependencies中多出了一个spring-core的jar包。
scope:范围分类
在这里有一个很重要的属性scope,也就是范围的jar意思:在上面我的spring-core的jar包没有设置scope,在没有设置scope的情况下,它的默认范围为compile
1.comple(编译范围):comple是默认的范围,如果没有提供一个范围,那么依赖的范围就是编译范围。编译范围在所有的classpath中可用,同时他们也会被打包。
2.provided(已提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如, 你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
3.runtime(运行时范围):在运行和测试的时候需要,但在编译的时候不需要。
4.test(测试范围):在运行和测试的时候不需要,但在编译的时候需要。
5.system(系统范围):system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。
统一管理相同版本的jar包
我这里就拿spring中的不同jar包来演示我这里在pom.xml中引入了spring-context、spring-core、spring-beans三个jar包都是5.1.7版本的,在引入的同时maven也把它的依赖包也引入了进来。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
如果因为一些原因我们需要使用5.1.5版本的jar包,我们一个一个改比较麻烦,maven也对这一问题制定了相应的对策,可以使用properties标签
<properties>
<cn.black.maven>5.1.7.RELEASE</cn.black.maven>//标签名可变,这里写版本号
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${cn.black.maven}</version>//version中写${标签名}
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${cn.black.maven}</version>//version中写${标签名}
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${cn.black.maven}</version>//version中写${标签名}
</dependency>
</dependencies>
如把他们统一修改为5.1.5版本的只需修改properties标签中的版本号即可,如图,我修改5.1.7为5.1.5版本
创建父工程,在子工程中引用父工程
首先需要创建一个父工程Parent01,创建步骤和普通Maven工程大致相同,唯一不同的就是在选择项目类型时,有三个选项jar、pom、war ,这次选pom类型。创建完后为了方便一会的操作按照项目MavenProject01的步骤我们创建MavenProject02,创建完后让Parent成为MavenProject01和MavenProject02的父工程。也就是让MavenProject01和MavenProject02的jar包统一由Parent管理。在MavenProject01和MavenProject02的pom.xml文件中都添加如下代码:
//Parent01的坐标,从Parent01的pom.xml文件中复制一下坐标就可以
<parent>
<groupId>cn.black.maven</groupId>
<artifactId>Parent01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
添加完后会发现两个文件中的坐标代码位置出现了黄色下划线,在这里只需要删除黄色下划线标记的代码即可。
然后将MavenProject01和MavenProject02所共有的jar包在父工程Parent01中引入就可以而不需要再在子工程中引入。
Parent01中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>
<groupId>cn.black.maven</groupId>
<artifactId>Parent01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<cn.black.maven>5.1.5.RELEASE</cn.black.maven>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${cn.black.maven}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${cn.black.maven}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${cn.black.maven}</version>
</dependency>
</dependencies>
</project>
MavenProject01中的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>
<artifactId>MavenProject01</artifactId>
<packaging>war</packaging>
<parent>
<groupId>cn.black.maven</groupId>
<artifactId>Parent01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>
MavenProject02中的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>
<artifactId>MavenProject02</artifactId>
<packaging>war</packaging>
<parent>
<groupId>cn.black.maven</groupId>
<artifactId>Parent01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>
如果需要再修改版本直接在父工程Parent01中修改版本就可以。
聚合
将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。
过程:在父类中添加代码:
<modules>
<module>../MavenProject01</module>//子工程的相对路径
<module>../MavenProject02</module>//子工程的相对路径
</modules>
在子工程中一定要添加relativePath标签
<parent>
<groupId>cn.black.maven</groupId>
<artifactId>Parent01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../Parent01/pom.xml</relativePath>//添加的代码,子工程的pom.xml文件到父工程的pom.xml文件的相对路径
</parent>
这样右击父工程→5 Maven install安装项目到本地仓库,它的子工程也就一起安装到本地仓库中了,然后在按照坐标在本地仓库中找就可以找到
上一篇: Linux安装Nginx步骤
下一篇: Java开发环境搭建
推荐阅读