-
maven compile 编译
maven test 测试
maven package 打包
maven clean 删除target
maven install 安装jar包本地仓库
查看全部 -
maven压缩包下载地址
查看全部 -
maven下载地址
查看全部 -
使用maven构建Web项目(介绍如何使用maven创建web项目,如何安装jetty插件和tomcat插件,并简介如何将项目打包到jetty和tomcat 中,并运行。)
案例:
描述:新建maven项目,这里使用webapp的模板(Group Id为org.apache.maven.archetypes,Artifact Id为maven-archetype-webapp),项目的Group Id为com.imooc.webdemo,Artifact Id为webdemo,项目里的index.jsp有×号,是因为没有ServletAPI的原因,所以需要在pom.xml中添加Servlet的依赖,打开浏览器进入maven的中央仓库,(https://mvnrepository.com/)搜索Servlet,点击3.0.1,将Servlet的坐标复制到pom中,为该坐标设置scope为provided,也就是说只在编译时和测试时运行,然后将junit的版本更改为4.10,接下来检查为我们创建的目录是否正确,只为我们创建了资源目录,所以按照maven的约定我们手动创建其他目录,在Java Resource下,只为我们创建了资源目录,按照maven的约定,手动创建其他目录,点击Java Resource选择New——>Source Folder,Project名为maven项目名,Folder name为src/main/java,然后再创建存放测试用例的目录,Folder name为src/test/java,如果无法创建目录,在Navigator视图下src的main下进行创建,再转到Explorer视图,进行更新Maven——>Update Project,这样存放资源文件的目录就显示出来了,接下来需要检查,classes文件的输出路径,项目上右键Build Path——>Configuration Build Path,点击source,如下图二为输出路径,确保它的输出路径为target/classes,接着要把项目转化成Web项目,项目上右键Properties——>Project Facets选上Dynamic Web Module,接下来需要修改部署时的默认配置,项目右键Properties——>Deployment Assembly,里面除了主代码的目录之外,测试目录的代码依旧是在发布时部署上去的,这里要将其删除,因为最终发布产品时,我们并不需要这些测试的文件,这样一个Web项目就创建成功了,访问的网址为:localhost:8080/webdemo/。
使用package命令将其打包,也就是打成war包,然后将其拷贝到支持的web容器中,项目就可在浏览器中进行访问了,这里使用jetty作为web容器。
首先在<builder>标签中添加jetty插件,jetty插件去maven的中央仓库中搜索Jetty Maven Plugin,使用的是最新的版本,把该插件的坐标复制到pom的<builder><plugins><plugin>标签中,然后启动一下,Run as——>Maven build,Goals输入jetty:run,如果控制台显示Started Jetty Server表明Jetty容器启动成功了,这样就可以在浏览器访问该项目了,访问http://localhost:8080/出现HelloWorld代表成功,如果想在打包的阶段直接运行jetty插件,可以在Jetty的坐标中添加<executions><execution>指定它的阶段,也就是package阶段运行目标,<phase>package</phase><goals>run</goal></execution></executions>目标为run如图三,在打包成功后使用jetty:run来运行jetty服务,然后右键项目,run as——>Maven build,Goals:输入clean package,访问localhost:8080出现hello world表示成功,如果要使用Tomcat作为容器,需要加入一个Tomcat的插件,进入Tomcat的官网,点击Maven Plugin,找到Version2.2,这里面有个例子,将它的坐标复制到pom中,如图4。
查看全部 -
maven聚合和继承
maven聚合:如果想在maven中将多个项目进行install,将其安装到本地仓库中,必须对其依次执行install命令,maven中有一种方式可以将其放到一起运行,这种方式称为聚合。
案例:将山鸡、南哥、B哥聚合到本地仓库中,这里需要新建一个maven项目,依旧使用quickstart模板,Group Id为com.hongxing,Artifact Id为hongxing-aggreation,它作为其他pom的容器,需要修改它的pom的<package>为pom</package>,然后使用<modules><module>B哥的maven项目名</module><module>南哥的maven项目名</module><module>山鸡的maven项目名</module></modules>,然后右键hongxing-aggreation的Maven——>Maven build,Goals输入clean install控制台输出结果为三次构建,第一次生成B哥的jar,并且将其安装到本地仓库中,第二次生成南哥的jar,并且将其安装到本地仓库中,第三次生成山鸡的jar,并且将其安装到本地仓库中。
继承:三个maven项目中都有一个共同的特点,就是都使用了junit,并且在每个项目的pom.xml中,都对其进行了配置,比如说b哥的maven使用了如下图,这样就出现了很多重复的地方,其实maven中可以想java中一样,将其共同的特性封装成一个父类,所以新建一个maven项目,Group Id为com.hongxing,Artifact Id为hongxing-parent,然后修改它的pom.xml,要将<dependencies>标签放置在<dependencyManagement>标签里,如果使用这个标签对依赖进行管理,它并不会在这个项目中运行,也可以将junit的版本号提取出来,在外面定义一个<properties>属性,并在该属性里通过<junit.version>设置junit的版本号,这样就可以在<dependencies>中的<version>中像使用EL表达式那样来调用它,${junit.version},最后将它的<package>改成pom,然后打开B哥的pom让其继承pom,这里就可以将junit的版本号进行删除,<scope>也可以删除掉,这里要使用到<parent>标签,然后引入我们的parent的maven的坐标,这样junit已经从父类parent,也就是pom中继承过来了。
src目录依然有报错,其实test目录和main目录,对于parent的pom来说,是没有作用的,可以将其进行删除,然后更新一下它,Maven——>Update Project,这个叉号就消除了。
查看全部 -
maven依赖传递
举例:古惑仔电影中,山鸡和南哥混,南哥和B哥混,对于山鸡而言就间接和B哥混了,换成程序而言,山鸡依赖南哥,南哥依赖B哥,山鸡就就依赖传递B哥了。
案例:
描述:新建3个maven项目,选择quickstart模板,第一个Group Id为com.hongxing,Artifact Id为hongxing-bge,Package为默认的,第二个Group Id为com.hongxing,Artifact Id为hongxing-nange,第三个Group Id为com.hongxing,Artifact Id为hongxing-shanji。
步骤1:南哥依赖于B哥,南哥的pom.xml中进行配置,引入B哥的依赖,需要知道B哥的坐标,然后编译一下南哥,Maven——>Maven build(在Goals:compile)。
南哥的maven项目首先会到本地仓库中进行查找B哥的jar包,如果本地仓库中没有,则会从远程中央仓库中下载,如果远程中央仓库中没有,则会报错,我们先将B哥进行打包,Maven——>Maven build(Goals:clean package),然后再将B哥安装到本地仓库中Maven——>Maven build(install),它依然会编译,并且会测试一遍,并且安装到指定的仓库中,接下来再对南哥进行编译Maven——>Maven build(clean compile),这样南哥就构建成功了。
步骤2:山鸡依赖于南哥,首先,要打包南哥的maven项目,并进行安装到本地仓库中Maven——>Maven build(clean install),依旧要找到南哥的坐标,然后编译一下山鸡Maven——>Maven build(compile)
依赖具有传递性,山鸡的maven项目并没有依赖B哥,B哥的依赖缺自动的加入到了山鸡的依赖目录里。排除依赖:依赖南哥的<dependency>标签中添加<exclusions><exclusion>B哥的坐标<exclusions><exclusion>
举例:山鸡只听从南哥的吩咐,不听其他人的吩咐,将B哥的依赖从山鸡的maven项目依赖中排除,。
产生如下图JRE System Library为J2SE1.5的原因是:maven默认使用jdk1.5,我们可以将其修改,点击JRE System Library的Properties属性,选择JavaSE-1.7(jre7),这样修改比较麻烦每次创建一个项目都需要修改一下,可以修改settings.xml,找到<profiles>大概182行,加入如下图片的代码,指定它默认的jdk为1.7。
查看全部 -
maven依赖范围
通过junit依赖来讲解依赖的范围<scope>
我们平时开发时,如果使用某一框架,就要引入相应的jar包到项目的classpath路径中,这样我们的项目就可以使用框架封装好的一些方法。
maven中提供了三种classpath:
1、编译
2、测试
3、运行
而我们使用junit依赖范围的值为test,这就表明了junit只存在测试的classpath中,也就是存在测试的范围,所以依赖范围就是控制依赖与三种classpath的关系的。
具体的scope的属性:查看maven官网(maven.apache.org),查看它的文档,点击Index (category),找到The Dependencies and Dependency Exclusions,找到Dependency Scope,提供了6种scope,分别是
compile:默认的范围,如果没有指定依赖范围,就会使用此依赖的范围的maven依赖,编译测试运行这三种classpath都有效。
provided:编译和测试时都有效,最后运行不会被加入(举了一个例子,当我们构建一个JavaEE的Web应用时,可以依赖ServletAPI,但是在最后运行时,并不会被加入,因为Web容器已经包含了这个API,如果再加入就会导致冲突)。
runtime:在测试和运行时有效,典型的例子就是jdbc驱动的实现,项目的主代码的编译只需要jdk提供的jdbc的API,只有在执行测试或者运行项目的时候才需要实现生成接口的具体jdbc的驱动
test:只在测试时有效,典型应用就是junit。
system:和provided一样,编译和测试时有效,与本机系统相关联,可移植性差,比如要引用本机的Java_Home,如果把项目移植到其他系统上,就可能由于路径的不一致,而导致错误。
import:导入的依赖范围,它只使用在dependencyManagement标签中,表示从其他的pom中继承过来的依赖。
该文档提供了import的例子,将A中的依赖导入到B中。
查看全部 -
maven中Pom.xml解析
Pom.xml:maven项目的核心管理文件,用于项目描述、组织管理、依赖管理、构建信息的管理,Pom中包含了许多的标签。
Pom.xml的常用元素:
<project>是pom.xml的根元素,包含了pom的一些约束信息。
<modelVersion>是一个固定的版本,也是必须的元素,指定了当前pom的版本。
坐标的信息由以下标签组成:
<groupId>主项目的标识,用来定义当前的maven属于哪个实际的项目,和我们为项目创建的包是一样的,是由反写的公司网址+项目名组成</groupId>
注意:maven的项目和实际的项目不是一一对应关系,maven项目体现的是模块化的概念,因此一个实际项目往往会划分成很多的模块。
<artifactId>表示一个模块的标识,实际项目中的一个模块,一般会使用项目名+模块名进行标识,比如struts2项目,它下面可能分为struts2demo01、struts2demo02,struts2是项目名,而demo01和demo02是模块名</artifactId>
<version>标识当前项目的版本号,版本号一般都是由三个数字来组成的,第一个0标识大版本号,第二个0表示分支版本号,第三个0表示小版本号,一般形式可以写为0.0.1snapshot,snapshot为快照的版本,版本除了snapshot,还有内测的测试版本alpha,以及公测版beta,比如在网上玩新出的游戏,经常会有公测不删档,对应的就是该版本,还有Release版本,它是一个稳定的版本,以及GA版本是一个正式的发布版本<version>。
<packaging>maven项目打包的方式,不指定默认打包是jar,还可以打包成其他类型,比如war、zip、pom等<packaging>
其他的标签:
<name>项目的描述名,一般是在产生对象文档时候才会使用</name>
<url>项目的地址</url>
<description>项目的描述</description>
<developers>开发人员的列表,项目发布的时候,可以把开发人员的信息填写进去</developers>
<licenses>许可证的信息,比如经常用到的开源框架,它都会有一些许可证的信息</licenses>
<organization>组织信息</organization>
依赖列表:它是比较重要的,会经常使用到,依赖列表下可以包含多个依赖项,依赖项通过制定它的坐标来确定依赖所在的位置,也就是<groupId><artifactId><version>,还可以指定它的<type>,还可以使用<scope>指定依赖的范围(之前写的junit的测试范围是test,test表示junit,这个构件(junit的jar包),只在测试的依赖范围内有用,比如在主代码中引用junit这个类,它就会报错),<optional>该标签有两个值,分别是true和false,它的作用是设置依赖是否可选,默认是false,子项目默认是false时,子项目默认是继承的,如果为true,子项目必须显示的引入该依赖,<exclusions>是一个排除依赖传递的列表,该标签下可以排除多个依赖通过<exclusion>,作用是:比如Ajar包依赖Bjar包,Bjar包又依赖Cjar包,C对于A来说就是传递依赖,如果A不想依赖C,就可以使用这个标签,比如我们使用的Spirng除了核心的jar包之外,它的jar包还引用其它很多相关的jar包,但对于我们而言只需要使用Spring的jar包,而其他的一些相关的jar包我们并不需要使用。
<dependencyManagement>依赖的管理,也可以通过<dependencies>声明依赖列表,通过<dependency>包含多个依赖,但是它并不会被运行,也就是说它不会被引入到实际的依赖当中,该标签一般主要用于定义在父模块中,供子模块继承用的。比如之前多个maven项目中,都使用到junit,我们就可以抽象出一个父类的模块,然后在父类模块中对junit进行一个定义,其他子模块直接继承该父模块即可。
<build>通常为我们构建的行为来提供相应的支持,我们经常在这里使用到<plugins>表示插件的列表,在该标签下可以有多个<plugin>标签,(我们之前使用到source插件对项目进行打包),在<plugin>中依旧是要指出插件的坐标通过<groupId><artifactId><version>
<parent>以及<modules>:经常使用到的:<parent>通常用于在子模块中对父模块的pom的一个继承,<modules>用来聚合运行多个maven的项目,如果有很多的maven模块是要编译的话呢,我们之前的办法是一个一个的编译,而使用<modules>就可以指定多个的模块,然后在一起进行编译。
查看全部 -
一、eclipse中安装maven插件(如果eclipse是4.0以上或者myEclipse就不用安装插件了)
1、插件放置在eclipse中的dropins文件夹下,并重启eclipse。
2、Maven需要jdk支持,而eclipse已经添加了jre,根据提示修改eclipse.ini。
3、eclipse-ini文件中
512m下添加-vm
再在底下添加jdk的bin目录的路径+javaw.exe
4、修改eclipse默认的jre(eclipse运行在JRE之上,maven使用到了JRE的支持,所以要修改eclipse的JRE,使其可以找到JDK,使用目录中私有的JRE,这样就能完全解决这个问题,默认的JRE没有一些包)
Preferences——>Java——>Installed JREs——>Add——>我们安装JDK的位置
Preferneces——>Maven——>Installations——>Add——>我们安装的Maven的位置
5、修改User Settings(找到settings.xml)
二、创建Maven项目
1、目录模板选择maven-archetype-quickstart
2、运行Maven项目——》右键run as——》Maven Builder——》输入compile点击run即可
3、Maven打包——》右键run as——》Maven Builder——》package(打包之后在项目根目录中就会有一个target文件夹,该文件夹下就会有该jar包
查看全部 -
maven中的坐标和仓库
构件:插件<plugin>+jar包<dependency>
坐标概念:maven中,任何一个依赖、插件、都可以称为构件,所有构件通过坐标作为其唯一标识。
建议:创建maven项目时,尽量符合规范<gorupId>(公司域名反写+项目名)和<artifactId>(项目名-模块名),<version>(构建的版本号)这样看起来更清晰,并符合逻辑,也更方便搜索。
仓库概念:管理项目的构件,仓库分为本地仓库和远程仓库。本地仓库找不到我们的构件,则会去maven的中央仓库查找,查找到后就会下载到本地仓库中,如果远程仓库中也找不到就会报错,maven默认提供了一个中央仓库地址(apache-maven——>lib——>maven-model-builder.license.jar里的pom-4.0.0xml,maven提供的超级pom,所有Maven项目都会继承这个pom)。
中央仓库地址:基本上平常用的开源框架,这里都会有,它包含了绝大多数的Java开源项目(基本上平常开发常用的开源框架都可以找到)。
<layout>:表示使用默认布置。
<snapshots>下<enabled>为false:禁止下载快照的版本构件。
镜像仓库:A提供了和B一样的功能,Maven的中央仓库服务器都是位于国外的,有时可能由于一些原因导致无法访问外网,所以国内提供了它的镜像仓库,相对来说,更快、更稳定一些。
修改镜像仓库的位置:apache-maven——>conf——>setting.xml中mirror,配置了镜像仓库,就不会再访问中央仓库。
更改仓库位置:maven从远程仓库中下载的构件,默认存放在用户目录中C:\Users\Administrator\.m2\repository,一般不会把仓库放在C盘目录中,如果遇到一些问题这个数据可能就没了,所以一般在<localRepository>标签中放置的是其他盘下的仓库。并且把setting复制一份放到goujian文件夹下,更新maven版本,就不用在重新更改了,直接把这个copy过去即可。
查看全部 -
Jdk1.7才能用3查看全部
-
maven常用命令2
查看全部 -
maven 常用命令1
查看全部 -
path 加入maven变量
查看全部 -
maven系统变量
查看全部
举报