摘要:添加的的依赖,可以从项目的中拷贝使用命令编译项目。在子模块中我们可以这样使用引入父模块坐标三使用建立项目新建一个项目,选择,如图所示在中配置插件可参见官方文档。部署项目到即可。
一、Maven入门 1.下载maven
Maven是基于项目对象模型(Project Object Model),可以通过一小段描述信息来管理项目的构建、报告和文档的项目管理工具,提供了一个仓库的概念,统一管理项目所依赖的第三方jar包,最大可能避免了由于环境变量的不同在不同电脑之间无法运行的问题,Struts2、Hibernate都是采用maven部署的项目。它是Apache软件基金会的一个开源项目,下载地址是:Apache Maven 注意:Maven3.3要求jdk版本为1.7及以上。将压缩包解压到任意目录:可以看到如下的目录结构:
新建环境变量M2_HOME,其值为maven的解压目录,并在path环境变量中引用M2_HOME下的bin目录:
shellM2_HOME:D:Program Files (x86)apache-maven-3.3.3 Path:...;%M2_HOME%in
接下来在命令行输入mvn -v命令可以查看版本:
首先创建如下的目录结构
src |----main |----java |----package |----test |----java |----package |----resources pom.xml
在main/java目录下创建我们的java源代码:
javapackage org.gpf.maventest01.model; public class HelloWorld { public String sayHelloWorld(){ return "Hello World!"; } }
在test/java目录下创建我们的测试代码(使用了Junit4测试框架):
javapackage org.gpf.maventest01.model; import org.junit.*; import static org.junit.Assert.*; public class HelloWorldTest { @Test public void testSayHelloWorld(){ assertEquals("Hello World!",new HelloWorld().sayHelloWorld()); } }
接下来编写pom.xml(可以参见Struts2,如图所示)
将其拷贝到项目的根目录,并修改为如下:
xml4.0.0 org.gpf.maventest01 maventest01 0.0.1SNAPSHOT junit junit 4.10
接下来在命令行进入我们的项目输入mvn compile命令(首次运行会下载第三方插件和maven依赖的jar,请耐心等待),对该项目进行编译。
最后使用mvn test命令运行我们的测试用例:
此时发现项目的根目录下多了一个target目录,其中class目录就是生成的类文件,reports目录就是一系列测试报告。
运行mvn package命令可以打包我们的项目,会生成maventest-0.0.1SNAPSHOT.jar。
二、Maven核心知识 1.常用构建命令mvn -v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除target(字节码和测试报告)
install 安葬jar包到本地仓库
如果一个项目需要利用到其他项目的jar包,一种方式是拷贝jar包并拷贝到classpath中,maven提供了一个更简单的策略,直接在本地仓库中查找即可。例如我们一个新的项目maven02项目需要使用到之前的maven01项目的HelloWorld类中的sayHelloWorld方法,使用maven可以这样:
在maven01项目中运行mvn install命令安装jar包到本地仓库。
创建maven02项目,在其中导入maven01项目的类。
src/main
javapackage org.gpf.maventest02.util; import org.gpf.maventest01.model.HelloWorld; public class Speak { public String sayHi(){ return new HelloWorld().sayHelloWorld(); } }
src/test
javapackage org.gpf.maventest02.util; import org.junit.*; import static org.junit.Assert.*; public class SpeakTest { @Test public void testSayHi(){ assertEquals("Hello World!",new Speak().sayHi()); } }
3.在pom.xml添加依赖。
xml4.0.0 org.gpf.maventest02 maventest02 0.0.1SNAPSHOT junit junit 4.10 org.gpf.maventest01 maventest01 0.0.1SNAPSHOT
使用mvn compile命令编译maven02项目。
2.使用archetype插件自动创建符合maven的目录骨架方式一:使用mvn archetype:generate根据提示一步步操作;
方式二:使用mvn archetype:generate -D命令一次性生成全部。
3.maven中的坐标和仓库maven中任何一个依赖、插件都可以被称为构件。所有构件通过坐标作为其唯一标识。
仓库可以管理项目的依赖。仓库可以分为本地仓库和远程仓库,如果本地仓库中找不到就会在远程仓库中查找并下载,如果远程仓库找不到就会报错。maven远程仓库的地址可以在maven安装目录的lib目录的maven-model-builder-3.3.3.jar中找到,如图所示:
将pom.xml打开。
由于maven的中央仓库位于国外,速度慢,也有可能其他原因无法访问,我们可以使用国内的镜像仓库。配置镜像仓库需要修改conf/settings.xml,打开该文件修改mirror标签如下:
xmlmaven.net.cn central central mirror in china http://maven.net.cn/content/groups/public
maven仓库默认是放在用户目录的.m2隐藏目录下的,Windows系统就是C:Users用户名.m2,我们需要将仓库迁移到其他目录,修改conf/settings.xml,如图所示:
将settings.xml复制到E:/tmp/mavenproject/repo,这样更新maven就不需要重新配置settings.xml了。
4.在MyEclipse中使用mavenMyEclipse默认安装了maven插件,极大简化了操作。在使用MyEclipse创建项目之前需要进行如下的配置:
配置maven安装目录(自带的可能有错)
给jre添加一个运行时参数(错误-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.的解决方案)
使用MyEclipse创建Maven项目的步骤(注意选择合适的Junit版本,默认是3.8.1,我们需要该变成4.10)如下:
接下来在MyEclipse中运行maven项目,右键项目名---Run As会出现如下菜单:
在弹出的的对话框的Goals中输入maven命令(compile、test、package等)即可。
5.maven的生命周期和插件maven有3个独立的阶段。
clean(清理)pre-clean
clean
post-clean
default(构建、最核心)compile
test
package
install
site(生成项目站点)pre-site
site(生成项目的站点文档)
post-site
site-deploy(发布站点到服务器)
Maven是基于插件的,我们可以在http://maven.apache.org/plugins/index.html找到合适的插件,例如源代码打包插件source插件。
编辑pom.xml,配置source插件(可以参见source插件文档)
xml... ... org.apache.maven.plugins maven-source-plugin 2.4 package jar-no-fork
使用clean package命令,运行结果:
xml7.依赖范围4.0.0 org.gpf.maventest maventest-demo 0.0.1-SNAPSHOT jar maventest-demo http://maven.apache.org UTF-8 junit junit 4.10 test org.apache.maven.plugins maven-source-plugin 2.4 package jar-no-fork
maven提供了3种classpath(编译、测试、运行),例如上面的pom.xml的Junit框架的scope属性为test。http://maven.apache.org/guides/introduction/introduction-to-dependency...上提供了6种依赖范围:
compile:缺省值,编译、测试都有效
provided:编译,测试都有效,但是在运行时并不会加入。例如Servlet API,因为Web容器本身有,如果加入就会出现冲突。
runtime:测试、运行有效。
test:仅测试时有效。
system:与本机相关,可移植性差。
import:导入的依赖范围,仅适用在dependencyManager中,表示从其他pom导入dependency配置。
8.依赖传递创建3个maven项目,grandfather、father、son,其中father依赖grandfather,son又依赖father,他们之间构成依赖。
例如在Father项目的pom.xml中添加对GradFather的依赖,只需要在dependency标签中指定GrandFather的坐标即可,就像下面这样:
xmljunit junit 3.8.1 test com.maventest GrandFather 0.0.1-SNAPSHOT
类似的在Son项目中添加对Father的依赖。现在构建Son需要先构建GrandFather和Father。对GrandFather和Father进行clean install命令,再对Son项目进行compile命令即可。构建完成后3个项目的目录结构如图:
此时发现Son依赖了2个项目GrandFather和Father,如果仅仅希望Son依赖Father可以将GrandFather的坐标进行依赖排除:
xml9.依赖冲突com.maventest Father 0.0.1-SNAPSHOT com.maventest GrandFather
依赖冲突有2条原则:
短路优先(优先解析路径短的版本),例如有以下2个依赖:A-->B-->C-->x.jar,A-->D--x.jar(优先)
路径相同,先声明先优先。
10.聚合与继承如果我们的项目要使用到以上的GrandFather、Father、Son3个模块,就可以使用聚合。新建一个relationship项目,修改其pom.xml如下:
``` 在relationship项目运行`clean install`命令将会依次生成3个jar并加入本地仓库。 在以上的项目中项目中每次都要配置Junit的依赖,我们可以向java编程那样将公共的模块抽取出来,这种方式叫做继承。新建一个maven项目,命名为common,其`pom.xml`配置如下: ```xml 4.0.0 com.maventest relationship 0.0.1-SNAPSHOT pom relationship http://maven.apache.org UTF-8 junit junit 3.8.1 test ../GrandFather ../Father ../Son 4.0.0 com.maventest.common common 0.0.1-SNAPSHOT pom common http://maven.apache.org UTF-8 3.8.1 junit junit ${junit-version} test
这是项目可能有红色的小叉,由于父模块不需要测试,我们可以删除src/test重新更新maven项目(右键项目-->Maven ForMyEclipse-->Update Project Configuration),发现红色的叉消失。在子模块中我们可以这样使用:
xml三、使用Maven建立Web项目4.0.0 com.maventest GrandFather 0.0.2-SNAPSHOT jar GrandFather http://maven.apache.org UTF-8 com.maventest.common common 0.0.1-SNAPSHOT junit junit
新建一个maven项目,ArcheType选择webapp,如图所示:
在pom.xml中配置tomcat插件(可参见Tomcat官方文档)。
xml4.0.0 com.maventest.webdemo webdemo war 0.0.1-SNAPSHOT webdemo Maven Webapp http://maven.apache.org junit junit 4.10 test webdemo org.apache.tomcat.maven tomcat7-maven-plugin 2.2
clean-->package-->部署项目到Tomcat即可。
四、常见问题和解决方案 1.jdk版本不符合的问题Eclipse中的jdk版本显示为1.5,但是编译使用的版本是1.7,可以参考以下的conf/settings.xml的配置:
xmljdk-1.7 true 1.7 1.7 1.7 1.7
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64421.html
摘要:软件项目的管理就会变得简单很多。比如说的驱动程序,,在是获取不到的,就需要手工上传到里是仓库组,在里没有这个概念,是特有的。 什么是Maven Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中.. Maven是一款跨平台的项目...
摘要:一什么是是一款软件项目管理和理解工具。基于项目对象模型的概念,通过添加一小段描述来管理项目的构建。另外如果子模块中指定了版本号,那么会使用子模块中指定的版本。 一、什么是Maven? Maven是一款软件项目管理和理解工具。基于项目对象模型(POM)的概念,通过添加一小段描述来管理项目的构建。 二、为什么要使用Maven? 以前在用Java开发一个项目时,往往需要引入几十或者上百个Ja...
摘要:项目构建基础从属于笔者的现代开发基础系列文章,介绍了的历史背景与多种构建工具对比,以及的基本配置安装与使用本文涉及的参考资料声明在学习与实践资料索引以及学习与资料索引。 Maven 项目构建基础从属于笔者的现代 Java 开发基础系列文章,介绍了 Maven 的历史背景与多种构建工具对比,以及 Maven 的基本配置安装与使用;本文涉及的参考资料声明在 Java 学习与实践资料索引以及...
摘要:在之前,十个项目可能有十种构建方式,但通过,所有项目的构建命令都是简单一致的。有利于促进项目团队的标准化。手工劳动往往意味着低效,意味着容易出错。这在很大程度上消除了重复。默认情况下,该文件夹下放置了本地仓库。学习实战许晓斌著 Introduction Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。通过Maven,我们只需要...
阅读 2579·2021-11-17 17:00
阅读 1776·2021-10-11 10:57
阅读 3657·2021-09-09 11:33
阅读 891·2021-09-09 09:33
阅读 3519·2019-08-30 14:20
阅读 3296·2019-08-29 11:25
阅读 2780·2019-08-26 13:48
阅读 716·2019-08-26 11:52