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

setting.xml的基本配置Eclipse中Maven的基本使用

程序员文章站 2024-01-16 09:33:46
...

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
setting.xml的基本配置Eclipse中Maven的基本使用
点击next后出现如下窗口,建议大家勾选Create a simple project 创建一个简单的Maven项目
setting.xml的基本配置Eclipse中Maven的基本使用
然后点击next会出现如下窗口,填写Group IdArtifact Id来指定坐标,Version不用修改,下面的Packaging需要注意一下,点开下拉框有jar、pom、war三个选项,他们分别指创建Java项目、创建Maven工程、创建web工程。我这里创建的为web工程,如下图
setting.xml的基本配置Eclipse中Maven的基本使用
点击Finish创建出一个Maven工程,基本目录结构也自动创建好了但是发现报了一个错。
setting.xml的基本配置Eclipse中Maven的基本使用
该错是因为web项目中没有web.xml而报错,解决办法如下:
右击项目名称→Properties→Project Facets 看到Dynamic Web Model左边打着对勾
setting.xml的基本配置Eclipse中Maven的基本使用
先把对勾去掉→点击Apply→再把对勾打上可以看见窗口下面多出了一行背景颜色为黄色的链接
setting.xml的基本配置Eclipse中Maven的基本使用
点击链接弹出一个小窗口,修改Context directory为src/main/webapp目录
setting.xml的基本配置Eclipse中Maven的基本使用
点击ok→点击Apply→点击Apply and Close,然后发现不报错了,并且在src下多出了一些文件夹以及之前没有的web.xml
setting.xml的基本配置Eclipse中Maven的基本使用
这里还有一个问题就是在webapp下创建一个jsp文件,jsp中左上角的<@符号部分会有红色波浪线,如图:
setting.xml的基本配置Eclipse中Maven的基本使用
原因:没有引入Tomcat
解决方法一:
右击项目名称→Build Path→Configure Build Path→Add Library→Server Runtime→选择Tomcat路径→Finish→Apply→Apply and Close 如图:
setting.xml的基本配置Eclipse中Maven的基本使用
解决方法二:
直接在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包。
setting.xml的基本配置Eclipse中Maven的基本使用

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>	

setting.xml的基本配置Eclipse中Maven的基本使用
如果因为一些原因我们需要使用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版本
setting.xml的基本配置Eclipse中Maven的基本使用

创建父工程,在子工程中引用父工程

首先需要创建一个父工程Parent01,创建步骤和普通Maven工程大致相同,唯一不同的就是在选择项目类型时,有三个选项jar、pom、war ,这次选pom类型。创建完后为了方便一会的操作按照项目MavenProject01的步骤我们创建MavenProject02,创建完后让Parent成为MavenProject01MavenProject02的父工程。也就是让MavenProject01MavenProject02的jar包统一由Parent管理。在MavenProject01MavenProject02的pom.xml文件中都添加如下代码:

	//Parent01的坐标,从Parent01的pom.xml文件中复制一下坐标就可以
	<parent>
	  <groupId>cn.black.maven</groupId>
	  <artifactId>Parent01</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
 	</parent>

添加完后会发现两个文件中的坐标代码位置出现了黄色下划线,在这里只需要删除黄色下划线标记的代码即可。
然后将MavenProject01MavenProject02所共有的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安装项目到本地仓库,它的子工程也就一起安装到本地仓库中了,然后在按照坐标在本地仓库中找就可以找到
setting.xml的基本配置Eclipse中Maven的基本使用