----------maven环境搭建及简单命令使用
1,maven下载地址:maven.apache.org
到达该页面找到左侧download,然后下载Binary zip archive对应的zip包。
2,配置maven环境变量。
找到环境变量(这里设置系统变量,用户变量同理,这里略),比如我下载的maven解压在"D:\DevelopmentRoot\apache-maven-3.5.2",点击新建按钮,变量名为"m2_HOME",变量值为"D:\DevelopmentRoot\apache-maven-3.5.2",点击确定按钮。然后找到path并编辑,在末尾填写";%m2_HOME%\bin;",点击确定。打开cmd,输入"mvn -v",如果此时出来maven版本号等相关信息,则说明我们部署maven成功了。
3,maven的目录结构:
src目录为一级目录;main及test及resources目录为二级目录;在main目录下为java目录(三级目录),同理test目录下也为java目录(三级目录);在java目录下为package目录(四级目录)。
4,按照以上maven目录结构创建相应的maven项目。
可到以下地址下载相应maven项目:
需要注意的是:Assert.assertEquals方法中的两个参数要相等,如果不相等则会报错,详情可百度查找该方法使用
5,找到pom.xml配置文件(该配置文件可下载struts2jar包,具体在struts2-core-2.3.24.jar包里,需要解压该jar包,然后找到该解压后的地址:struts2-core-2.3.24\META-INF\maven\org.apache.struts\struts2-core下即可看到pom.xml文件,将该文件放置到以上maven项目中,与src平级放置)
6,编写好后,打开cmd,切换到4步骤中创建的maven项目地址,比如我创建项目的地址是:D:\code\maven01,切换到该地址下,输入命令:mvn compile 进行编译(第一次执行时间较长,请耐心等待),执行完后,继续执行命令:mvn test ,这个时候会在maven项目中生成一个target的文件夹,该文件夹与src文件夹平级放置,里面包含一些测试报告及相关编译后等class文件等。继续输入命令:mvn package ,则会在target文件夹里生成一个该maven项目的jar包
------------------clean,install命令使用及maven坐标、打包地址讲解
7,maven常用的构建命令:
mvn -v 查看maven版本;mvn compile 编译maven项目;mvn test对该项目进行测试,生成相应测试报告等;mvn package 打包
mvn clean 删除target文件夹(包含该文件夹下所有相关文件) mvn install 安装jar包到本地仓库中
其中 mvn clean使用较简单,这里不详细说明,mvn install的命令表示为某个maven项目打包,比如:我此时想将以上创建的maven01项目打成一个类似于junit的jar包供另一个项目maven02使用,则首先我们在使用命令行打包时切换地址到maven01项目下,假如maven01项目地址:D:\code\maven01,输入cmd后切换到D:\code\maven01地址下,然后输入mvn install命令后则会为maven01打个jar包,那么该jar包会放在哪里呢?
默认情况下,该jar包会放在本地仓库:C:\Users\Administrator\.m2\repository下,如果此时你的maven01项目的pom.xml配置的groupId为:com.imooc.maven01
artifactId为:maven01-model,version为:0.0.1SNAPSHOT。以下截取maven01项目中配置情况:
<groupId>com.imooc.maven01</groupId>
<!--artifactId表示模块名,这里建议使用项目名-->
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
则相应的在打maven01的jar包时,会依次根据groupId、artifactId、version生成相应文件夹,所以最后可以查找到本地仓库放置maven01的jar包地址为:
C:\Users\Administrator\.m2\repository\com\imooc\maven01\maven01-model\0.0.1SNAPSHOT下,如果本地仓库找不到jar包,maven会到中央仓库中进行下载,这也是为什么我们引入junit的jar包时并没有对junit的相关类使用mvn install命令但还是能在本地仓库中找到junit的jar包的原因。其实,从专业角度来说,pom.xml中的groupId、artifactId、version三个标签就构成了一个坐标,通过这个坐标就能找到其在仓库中的具体位置,这在后面章节中会逐步说明。(maven02的项目可参照maven01来创建,其中maven02的pom.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.maven02</groupId>
<!--artifactId表示模块名,这里建议使用项目名-->
<artifactId>maven02-model</artifactId>
<version>0.0.1SNAPSHOT</version>
<!--配置junit的依赖包-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!--添加maven01项目的jar依赖-->
<dependency>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven01-model</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>
</dependencies>
</project>)
------
------------------maven插件archetype之如何学会自动建立maven目录骨架
两种方式:
方式1:首先cmd后切换到想要建立maven工程的地址,比如我想在D:\code下建一个maven03的maven项目,并自动生成maven骨架,切换到D:\code后,输入:mvn archetype:generate后按回车键,会出现Choose a number or apply filter.............(即让你输入一个数字),这里输入:6然后按回车键,此时出现Choose org.apache.maven.archetypes:.......version:(大概意思是让你输入一个archetype插件的版本号),输入:4然后按回车键(maven此时会帮你下载该版本的archetype插件,所以稍等一会儿)。此时出现Define value for property 'groupId':(让你输入groupId编号,如果不清楚groupId则看前面内容,这里略),输入:com.maven03然后按回车,此时出现:Define value for property 'artifactId':,输入:maven03-model然后按回车键,此时出现:Define value for property 'version' 1.0-SNAPSHOT:,输入:0.0.1SNAPSHOT然后按回车键,出现:package:,输入:com.cn.maven.model,然后按回车键,此时出现Y::,输入y然后按回车键,直到看到builed success!则表示构建成功,此时会在D:\code下生成文件夹:maven03-model,里面包含pom.xml及相关maven目录结构。
方式2:cmd切换到D:\code下,依次输入:mvn archetype:generate -DgroupId=com.maven04 -DartifactId=maven04-demo -Dversion=0.0.1SNAPSHOT -Dpackage=com.maven04 然后按回车键,之后出现Choose a number or apply filter.............(即让你输入一个数字),这里输入:6然后按回车键,此时出现Choose org.apache.maven.archetypes:.......version:(大概意思是让你输入一个archetype插件的版本号),输入:4然后按回车键(maven此时会帮你下载该版本的archetype插件,所以稍等一会儿)。知道看到Build Success字样表明你已创建成功。
----------------------maven坐标命名规范
一般groupId标签用:网址简写+项目名来进行命名。比如:com.imooc.maven04;artifactId标签用:项目名+模块名来进行命名,比如:maven04-model;version标签表示版本号。
----------maven本地仓库及远程仓库、镜像仓库地址及如何修改默认的本地仓库地址
maven本地仓库的默认地址:C:\Users\Administrator\.m2\repository
全球远程仓库地址查找方式:在下载的maven文件夹里,在lib中找到jar包名为:maven-model-builder-3.5.2.jar(根据自己版本而定具体名字),将其解压,找到org\apache\maven\model下,有个pom-4.0.0.xml(超级文本),编辑器打开,找到第一个如下标签:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
其中的url值:https://repo.maven.apache.org/maven2即为全球中央仓库地址。
镜像仓库,可以理解成就是一种仓库,用来存放资源的地方,与本地仓库、远程仓库作用一样,默认镜像仓库是没有被放开的,即默认处于关闭状态,
可在conf文件夹里面的settings.xml文件中找到,大概是152行,如下:
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
其中,id标签为一,mirrorOf可自己定义(也可用通配符*号,表示匹配所有镜像仓库),name表示镜像名,可自己定义,url表示你要去下载的资源地址。
注:镜像仓库一旦开启,所有指向其他仓库的访问都会跳转到镜像仓库来,所以一般慎重使用。
比如,我这里引用国内镜像仓库:
<mirror>
<id>maven04</id>
<mirrorOf>central</mirrorOf>
<name>central in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
怎样修改默认的本地仓库地址呢?
找到conf文件夹下的settings.xml文件,将里面注释掉的localRepository标签(因为默认是关闭的,选用以上的默认地址,需要手动放开进行修改),
比如我想要将我的本地仓库放在D:\code\repository中,则可以这样标记localRepository标签:
<localRepository>D:/code/repository</localRepository>
此时可以通过mvn compile或其他命令来进行验证,执行命令会在D:/code/repository中下载一些资源。
--------------------------eclipse中安装maven插件及使用maven进行打包
首先下载好maven插件,解压后将该文件直接copy到eclipse的dropins文件夹中,然后重启eclipse即可(这种方法简单粗暴且屡试不爽)。
需要配置eclipse指向下载好的maven插件,按以下步骤进行搜索填写:
打开eclipse--->windows----->preferences---->Maven------->Installations(右侧点击Add按钮,Installation home右侧点击Directory按钮,指向下载的maven插件文件地址,点击确定即可)---->User settings(右侧Global settings表示全局设置,User settings表示当前用户下设置,点击右侧browser按钮,指向下载的maven插件下的conf文件里的settings地址)--->点击确定即可。
安装完毕后,新建maven工程,默认会选择........quickstart版本的archetype自动创建maven骨架的插件,点击下一步,此时会让你输入:groupId,artifactId,最后点击finish即可。要运行maven项目进行打包等操作时,找到pom.xml配置文件,右键Run as找到maven build,会让你选择哪一种命令来操作,在右侧Goals文本框中输入:package,点击Run,直到控制台输入Build Success字样表示打包成功,此时,在工作空间中即可找到该jar包。
-----------maven声明周期了解
完整的项目构建过程:清理、编译、测试、打包、集成测试、验证、部署。
maven声明周期:clean清理项目;default构建项目;site生成站点。
clean清理项目分为:pre-clean执行清理前的工作;clean清理上一次构建生成的所有文件;post-clean执行清理后的文件。
default构建项目(核心):compile,test,package,install
site生成项目站点:pre-site在生成项目站点前要完成的工作;site生成项目站点文档;post-site生成站点后要完成的工作;site-deploy发布生成的站点到服务器上。
------------怎样修改maven默认的jdk版本?
maven默认的jdk版本是jdk1.5,这就会导致我们打包后在JRE System Library中看到jdk为1.5的版本,实际上我们项目中用到的可能是1.7或者1.8或者其他,那么怎么修改呢?
找到maven文件中conf文件下的settings.xml文件,找到<profiles>标签,在里面添加:
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>之后在新建maven项目,就会看到jdk为1.7了,当然如果想默认是其他jdk版本,只要修改该参数即可。
------------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">
<!-- 指定当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!-- 一般版本号为三位数字,第一个数字表示大版本号;第二个数字表示分支版本号;第三个数字版本号表示小版本号。
版本后缀含义:snapshot快照,alpha内部测试,beta公测,Release稳定版本,GA正式发布 -->
<version>当前项目版本号</version>
<packaging>打包方式,默认为jar,还有war,zip,pom等格式</packaging>
<!-- 项目描述名 -->
<name>maven1-model</name>
<!-- 项目地址 -->
<url>http://maven.apache.org</url>
<description>项目描述信息</description>
<developers>开发者信息</developers>
<licenses>许可证信息</licenses>
<organization>组织信息</organization>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!-- scope标签表示依赖范围,有6个值,分别为:compile,provided,runtime,test,system,import
compile:默认的范围,编译、测试、运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:只在测试范围有效
system:与本机系统相关联,可移植性差
import:导入的范围,它只使用在dependencyManager标签中,表示从其他的pom中导入dependency的配置
-->
<scope></scope>
<!-- 设置依赖是否可选 默认false -->
<optional></optional>
<!-- 排除依赖传递列表 -->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖的管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<-------------->
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- -->
<parent></parent>
<modules>
<module></module>
</modules>
<build>
<!-- 插件列表 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
关于maven的依赖传递可参照我的另一篇文章:
maven的依赖冲突遵循两个原则:短路优先及就近原则。
短路优先:比如B依赖A,C依赖B,按照依赖传递性,则有C-->B-->A的关系,
如果此时A引入spring的jar包为1.2版本,B引入spring的jar包为1.5版本,则C最终引入spring的jar包为1.5版本
就近原则:比如C依赖A,同时C依赖B,但C的pom.xml配置中先写的是A的坐标,A引入了jdbc的jar包版本为2.3,B引入了jdbc的jar包版本为2.8,则C最终引入的是2.3版本。
关于maven的聚合和集成可参照我的另一篇文章:
------------------------------------如何用maven创建web项目以及如何使用服务器插件运行web项目
首先新建maven项目,选择artifact Id为web-app结尾(表示新建的是web项目)的archetype版本,GroupId填写:com.org.web-app;Artifact Id填写:webDemo,点击finish。
新建完web项目后jsp会报错,这是因为缺少servlet-api.jar包,进入maven中央仓库:http://mvnrepository.com/ ,搜索servlet-api.jar,然后将该jar包坐标填写到pom.xml中需要注意的是:该jar包的依赖范围为:provided(表示只在打包测试时用到,正式发布不用,因为容器自带,引入可能导致冲突)。在Java Resource下补全maven项目结构:依次新建文件夹:src/main/java及src/test/java两个文件夹。然后右键项目-->build path-->在source中查看文件的输出位置=是否指向target/classes,如果不是则需要进行修改。点击Project Facets查看Dynamic Web Module是否勾选(没勾选需要选中,表示此项目为Web动态项目)。最后点击OK。
怎样用jetty/tomcat插件来运行该项目呢?
首先在maven中央仓库中搜索:jetty-maven,找到jetty插件的坐标,填写到pom.xml中(tomcat同理),完整的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.org.web-app</groupId>
<artifactId>webDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>webDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加servlet-api.jar,依赖范围仅限于打包和测试运行发布则不需要 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- 添加jetty插件
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.8.v20171121</version>-->
<!-- 使用tomcat插件运行 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!-- 在打包成功后使用jetty:run来运行jetty -->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>webDemo</finalName>
</build>
</project>
最后点击项目右键--->run as Maven build--->输入package直到出现start字样表示成功启动服务(第一次启动下载东西较多,会慢点)。
jetty访问地址:http://localhost:8080/
tomcat访问地址:http://localhost:8080/webDemo/
需要注意的是,如果pom.xml中没有加入<executions>标签内容,则运行项目时输入:jetty:run或者tomcat:run即可运行。
---------------------mvn配置exec插件并运行java指定文件的main方法可参照以下地址:
-----如何用maven将本地jar包放入本地仓库中并在项目中进行引用