Maven简介
Maven来自于犹太语,意思是知识的积累,Maven可以使用小段代码描述项目的构建,快速构建项目。
在我看来Maven主要作用有如下两点
1、用于管理依赖Jar包,在没有Maven之前做项目都需要先把Jar包下载到本地,然后放到项目中,如果不是web项目还需要创建lib文件夹,并且选择Build path。当项目所依赖的jar包过于庞大时,不利于项目的构建,Maven可以使用简单的代码配置自动下载jar包并放到自己项目中进行管理。
2、规定项目规范以及配置相关组件,在没有maven之前,项目文件名称没有规范,而在maven项目中会创建src/main/java,src/main/test 存放专门的代码。
Maven项目创建步骤
这里主要使用工具IDEA创建Maven项目,当然小伙伴们使用eclipse或者Myeclipse也可以
1,下载maven
2,修改配置文件
其实配置文件主要修改的地方是localRepository属性,改属性指定jar包下载后的存放位置
3,IDEA配置Maven(eclipse或者Myeclipse部分版本需要下载插件)
配置完成后就可以创建maven文件,如果没有配置的话默认是下载到C盘
1、创建普通Maven java项目
在项目中如果需要添加依赖jar包的话就可以直接在pom文件中配置就可以下载相关jar包
,例如我需要使用springjar包,首先去maven依赖查询网站上搜索jar包,网站地址:https://mvnrepository.com/
选择合适的版本直接复制到自己pom文件中即可
编写完成后Maven自动会检查自己的本地仓库(也就是刚才填写的那个jar包地址)中是否存在改jar包,不存在的话去maven的中央仓库进行对应jar的下载,并且把相关依赖jar包都下载下来
本地仓库展示如下:
jar包的文件位置是pom文件中 groupId+artifactId+version,下载jar包的时候可能因为网络问题,jar包下载错误,这时候配置文件pom处会报错标红,可以选择删除本地jar包文件夹重新下载jar包
2、创建Maven Web项目
创建Maven的web项目和普通java项目一样,只不过需要使用maven插件创建
创建完成后如下
刚创建完成没有存放java代码的文件夹,所以需要创建文件夹存放对应代码,
刚创建完成后发现无法创建类,不用着急,修改文件属性就好,点击file按钮,选择project struct…,然后按照顺序执行就好,sources用于存放java,resources存放相关资源文件
最后使用Tomcat配置使用就好
Maven常用标签
modules:模块,用于指定项目中其他模块名称,主要用于创建聚合项目使用。
parent:继承,类似于java中extend,用于依赖的复用
<parent>
<artifactId></artifactId>
<groupId></groupId>
<version></version>
</parent>
packaging:打包的方式,普通java项目是jar,如果是聚合项目为pom,如果是web项目则是war
properties:定义一个或多个maven属性,用${}取值,主要用于一些版本号,依赖jar包都需要传入版本号,为方便统一修改,先定义好,后面需要用的时候再改,并在需要用的时候使用
<properties>
<junit.version>4.1</junit.version>
</properties>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
也可以使用properties指定POM文件中对应属性的值
${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/
${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/
${project.build.directory} : 项目构建输出目录,默认为target/
${project.outputDirectory} : 项目主代码编译输出目录,默认为target/classes/
${project.testOutputDirectory}:项目测试主代码输出目录,默认为target/testclasses/
${project.groupId}:项目的groupId
${project.artifactId}:项目的artifactId
${project.version}:项目的version,与${version} 等价
${project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
dependencies/dependency:定位依赖jar包
scope:指定依赖使用的范围,一共有5个值
1,、compile (编译范围)compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。
2、provided (已提供范围)provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
3、runtime (运行时范围)runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
4、test (测试范围)test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
5、system (系统范围)system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。
build:用于项目编译设置,其中可以使用resources标签指定与项目关联的文件在什么位置以及是什么,plugins标签可以指定一些maven的插件
<build>
<resources>
<resource>
<directory>src/main/java</directory> <!-- 文件地址 -->
<includes>
<include>**/*.xml</include> <!-- 指定那些文件匹配 -->
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${sources.plugin.verion}</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>