Maven3应用入门讲座_第1页
Maven3应用入门讲座_第2页
Maven3应用入门讲座_第3页
Maven3应用入门讲座_第4页
Maven3应用入门讲座_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Maven入门指南主讲人:陈雄华目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用传统开发回顾收集依赖构件到CLASSPATH编写源代码、配置信息JavaC编译单元测试产品打包、发行代码共享、储存,以及版本控制经常遇到哪些问题?严重依赖IDE?Maven介绍清理编译测试报告打包部署答案1:它是一个构建工具*高度自动化*跨平台*丰富的可重用组件*标准化>mvnclean>mvncompile>mvnpackageMaven介绍

答案2:它是一个依赖管理工具springlog4jhibernate...pom.xmlProjectA自定义插件第三方插件Maven介绍答案3:它是一个平台拥有无限可能的平台Maven如可集成jetty插件,通过Maven启动Jetty服务器,如可集成脚本运行插件,在构建时自动压缩JavaScript及CSS,或开发自定义的插件,自动解析自定义的格式化CSS文件生成图标库meta.xml等,....Maven介绍Maven版本Maven2完成了对Maven1的重写。重写的首要目的是要提供了强大的Java构建和包含API的项目,允许Maven被植入任何地方,尤其是高级别的产品如IDEs、质量工具、报告工具等这些。Maven2构建生命周期的概念正式化,其比Maven更易扩展;Maven3在2.x基础上大幅提升性能。可以自动指定父版本,并行生成,更好的完整性报告、多语言生成、更好地支持M2Eclipse…我们要使用Maven3Maven安装下载安装包地址:/download.html当前版本为3.0Windows系统下安装:首先需要确认系统中装有JDK(版本1.5+);将压缩包解压到本地磁盘某目录中,该目录则称为安装目录。例如D:\opensource\apache-maven-3.0目录结构:binMaven的运行脚本bootMaven自己的类装载器conf该目录下包含了全局行为定制文件setting.xmllibMaven运行时所需的类库...Maven安装配置环境变量M2_HOME=安装目录在PATH系统变量中增加%M2_HOME%\binMAVEN_OPTS=-Xms128m-Xmx1024m(非必要项,可防止内存溢出)检查安装正确性在命令行提示符下执行:mvn–v能看到Maven和JDK的版本号为安装正确小试Maven命令mvnhelp:system该命令将会下载help插件并运行它,且打印出Java系统属性和环境变量目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用Maven基础概念插件仓库构件生命周期构件构件即Artifact:artifact是工程将要产生或需要使用的文件,它可以是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupId,artifactId及version组合的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见Repository)中,否则Maven无法找到(识别)它们。pom.xml:<dependency>

<groupId>mons</groupId>

<artifactId>commons-lang3</artifactId><version>3.2.1</version></dependency>artifactRepository插件构件即Plug-in:Maven是由插件组织的,它的每一个功能都是由插件提供的。插件提供goal(类似于Ant中的target),并根据在POM中找到的元数据去完成工作。主要的Maven插件要是由Java写成的,但它也支持用Beanshell或Ant脚本写成的插件。artifactRepository

<build>

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>

</plugin></plugins>

</build>构件版本号演进1.0-SNAPSHOTtags1.1-SNAPSHOT1.0trunk1.2-SNAPSHOT1.1branches1.3-SNAPSHOT1.1.1-SNAPSHOT1.1.1合并1.2发布版本号约定:<主版本>.<次版本>.<增量版本>-<里程碑版本>一般来说,主版本和次版本都会声明,但增量版本和里程碑版本则不一定会用。生命周期默认生命周期Maven仓库Maven仓库本地仓库远程仓库中央仓库私服其他公共库仓库分类仓库即Repository:存储构件或插件的地方,按大类划分为本地仓库及远程仓库,远程仓库一般由Maven服务器提供仓库管理功能。仓库协作图本地仓库目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用安装Nexus私服部署安装地址:https:///download-oss-sonatypeNexus私服仓库宿主库hostReleases:本地已发布构件,插件的版本Snapshots:本地发布的快照版本。3rdparty:第三方构件,如Oracle,db2等构件代理库proxy第三方的公共库,如central,Jboss库,将远程的仓库缓存在本地,加快构件的下载。库组grouppublic:可以将多个库组织在一起对外提供统一的地址引用。Nexus私服仓库publicreleasessnapshots3rdparty代理库...Maven私服远程仓库<repository>

0:8081/nexus/content/groups/public/</repository>setting.xml本地环境代理......Nexus私服主要配置安装好NexusMaven私服后,通过admin/admin123登录后台。

1.Release本机仓库需要将redeploy设置有allow,以便允许Host的Release可以允许重新发布;

2.删除ApacheSnapshots代理库,新增ApacheReleases,远程地址为:/content/repositories/releases/3.PublicRepositories将可用的Reposity要选择上,并排好顺序。Maven仓库配置:setting.xml$user.home/.m2/setting.xml为用户范围的配置文件(优先级高)$M2_HOME/conf/setting.xml(优先级低)为全局范围的配置文件,修改后将影响本机所有用户的配置建议:只修改用户级别的配置,既不影响其它用户,也不影响后期升级。配置介绍localRepository:

自定义本地库路径,默认在$user.home/.m2中interactiveMode:offline:是否每次编译都去查找远程中心库,默认为falsepluginGroups:插件组,例如org.mortbay.jettyproxies:通过代理访问外部库servers:Maven服务的认证信息,mirrors:镜像库,可以指定内部中心库profiles:个性配置,需要在Activation标签中激活activeProfiles:表示激活的profilesetting.xml:远程仓库配置使用私服的public构件库使用私服的public插件库远程仓库配置,指向私服的public组仓库:setting.xml:本地仓库配置<settings><localRepository>E:\m2\repository</localRepository>

....</settings>默认情况下:本地仓库位于<用户目录>/.m2/repository,可通过setting.xml的<localRepository/>指向其它目录。setting.xml:配置私服的用户密码[1]

首先,在setting.xml中添加nexus服务器账号。如何在Nexus服务器创建账号请参考官方说明<servers><server><!—正式发布仓库账号--> <id>releases</id> <username>deployment</username> <password>123456</password></server><server><!—快照版布行仓库账号--> <id>Snapshots</id> <username>deployment</username> <password>123456</password></server></servers>使用admin/admin123登录Maven私服Nexus的后台,在:secutiry->users下维护Nexus的用户及密码,这儿使用deployment用户,密码必须和服务端设置一致。将项目发行到公司内部仓库。在pom.xml中添加:<distributionManagement><repository><id>releases</id><!—发布库:此处ID以上页setting.xml中的<server>的<id>一致--><name>InternalReleases</name><url>http://192.168.10:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>Snapshots</id><!—快照库:此处ID以上页setting.xml中的<server>的<id>一致--><name>InternalSnapshots</name>

<url>http://192.168.10:8081/nexus/content/repositories/snapshots/</url></snapshotRepository></distributionManagement>在setting.xml中指定releases库及snapshots库的的访问用户及密码,在项目的pom.xml中则指定库的地址,两者通过id绑定。在项目处,通过命令:mvndeploy即可发布构件了。setting.xml:向远程仓库发布构件[2]

使用私服作为远程仓库的镜像,能大大加快下载效率:<mirrors><mirror>

<id>nexus</id> <mirrorOf>*</mirrorOf>

<http://192.168.10:8081/nexus/content/groups/public/</url></mirror></mirrors>setting.xml:向远程仓库发布构件[2]在一些开源项目的pom.xml中直接显式通过<repository>指定了远程仓库。通过setting.xml的<mirror>可以使用私服作为远程仓库的镜像,避免从远程仓库下载构件,提高速度。

所以mirrorOf主要用于开源项目,对自开发项目一般是没有什么用的。setting.xml:方案启用<activeProfiles><activeProfile>development</activeProfile><activeProfile>public-snapshots</activeProfile></activeProfiles>在setting.xml中可以配置多套方案,可通过<activeProfiles>指定具体要启用哪套方案。IDEA中也可选择具体启用哪套方案公司内部仓库使用总结重点1:向内部仓库发布构件使用deploy命令发布,但确保服务器地址和认证信息(账号和密码)。即pom.xml中配置的<distributionManagement>标签与setting.xml配置的<server>标签id一致。如果要发布第三方构件,可以进入Nexus服务器管理界面添加,也可以使用命令,具体参考官方文档。重点2:设置镜像,使得内部开发人员只一个出入口在setting.xml中配置<mirrors>、<profile>、<activeProfiles>标签目录Maven简介Maven基础概念Maven私服依赖/继承/聚合常用插件和自动化部署IDEA下Maven项目开发Maven常见问题pom.xml简介<dependencies>:构件依赖<parent>:模型继承<dependencyManagement>:依赖管理<reporting>:创建报告<build>:构建<repositories>:引用第三方仓库<licenses>:许可是Maven项目的核心配置文件,位于每个工程的根目录,描述Maven所有元数据的文件。pom.xml:构件依赖依赖配置<dependency><groupId>……</groupId><artifactId>……</artifactId><version>……</version><classifier>……</classifier><scope>……</scope><type>……</type><systemPath>……</systemPath><optional>……</optional><exclusions></exclusions></dependency>依赖配置详细介绍groupId、artifactId、version是依赖的基本坐标,缺一不可,其它两个坐标元素不指定时将采用默认值type:依赖的类型对应坐标packaging,默认为jar,可选为pom,war,earoptional:标记依赖是否可选如一个项目同时支持mysql,oracle,但在真正使用时只会选择一种,此时可以设置为true,默认为false。exclusions:排除传递依赖依赖配置详细介绍scope:依赖范围compile:编译范围,是默认scope,在classpath中存在provided:已提供范围,比如容器提供ServletAPIruntime:运行时范围,编译不需要,运行时需要,如数据库驱动程序test:测试范围,单元测试环境需要system:系统范围,自定义构件,需通过systemPath指定所在的本地路径import:导入依赖依赖传递art1art2art3传递依赖关系表第2直接依赖??第1直接依赖依赖分析A->B->C->X(1.0)A->D->X(2.0)X是A的传递依赖调解原则:第一原则:路径近者优先原则x2.0传递给A最近第二原则:第一声明者优先原则当路径相等时,则由POM声明的依赖顺序决定mvndependency:list

//打印出依赖列表mvndependency:tree

//打印出依赖树mvndependency:analyze//分析当前依赖依赖排除<dependency><groupId>org.unitils</groupId><artifactId>unitils-core</artifactId><version>${unitils.version}</version><exclusions>

<exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></exclusion>

</exclusions></dependency>art1art2artX11artX12artX13exclusionexclusion模块继承:语法通过子项目来继承,可以共享父项目定义的所有的值。比如自定义构建信息,版本仲裁,父模块的packaging必须是pom类型的,也不需要src/main/java了特点:1.单亲父节点2.允许覆盖<modelVersion>4.0.0</modelVersion><parent><groupId>com.test</groupId><artifactId>sample-parent</artifactId><version>1.0.0</version><relativePath>

../sample-parent

</relativePath></parent><artifactId>sample-module1</artifactId>sample-parentsample-module1模块继承:父模块统一属性定义构件及插件版本管理发布管理设置团队信息...父模块包括的信息模块继承:父模块<properties>:定义变量信息,子模块可以使用;<dependencyManagement>:将项目中需要用到的构件统一在此管理好,包括构件包、构件名及版本,而子模块引用即可,统一构件的版本管理,方便维护;<pluginManagement>:将项目中需要用到的共用插件统一在此管理,作用同上;<distributionManagement>:发布管理,所有子模块复用之。对照sample-parent及其子模块进行学习。多模块开发:组合组合:将多个模块组合在一起,packaging设置为pom,也无需src/main/java目录;使用:一般情况下,在项目根目录下创建组合模块,将所有子模块聚合在一起。<name>myproject-all</name><modules> <module>myproject-dao</module> <module>myproject-biz</module> <module>myproject-mvc</module></modules>参见sample-project项目的根pom.xml经典多模块结构1.父模块2.子模块3.聚合模块4.辅助模块1.父模块:管理构件/插件版本,发布管理等;2.子模块:项目功能模块;3.聚合模块:将项目的所有模块组合在一起;4.辅助模块:项目功能变更、数据库变更,数据脚本、执行脚本等。目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用插件绑定pile......maven-compiler-plugincompile...内置插件(1)生命周期阶段(phase)插件目标(goal)pre-cleancleanmaven-clean-plugin:cleanpost-clean表一:clean生命周期内置插件绑定表三:site生命周期内置插件绑定生命周期阶段(phase)插件目标(goal)pre-sitesitemaven-site-plugin:sitepost-sitesite-deploymaven-site-plugin:deploy内置插件(2)生命周期阶段(phase)插件目标(goal)process-resourcesmaven-resources-plugin:resourcescompilemaven-complier-plugin:compileprocess-test-resourcesmaven-resources-plugin:testResourcestest-compilemaven-compiler-plugin:testCompiletestmaven-surefire-plugin:testpackagemaven-jar-plugin:jarinstallmaven-install-plugin:installdeploymaven-deploy-plugin:deploy表三:default生命周期内置插件绑定显式指定生命周期的插件执行目标<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<configuration>

<includeEmptyDirs>false</includeEmptyDirs>

</configuration>

<executions>

<execution>

<id>copy1</id>

<phase>prepare-package</phase>

<goals>

<goal>copy-resources</goal>

</goals>

<configuration>

<includeEmptyDirs>true</includeEmptyDirs>

<outputDirectory>${basedir}/target/classes/META-INF/web-resources/foundation/

</outputDirectory>

<resources>

<resource>

<directory>src/main/webapp/foundation/</directory>

<includes>

<include>**/*.*</include>

</includes>

</resource>

</resources>

</configuration>

</execution>

</executions>

</plugin>插件配置<build> <plugins> <plugin> <!--Maven一切的插件工作都是居于插件执行的,常用默认的插件有:编译、打包、安装--> </plugin> </plugins></build>PS:一般构建时加上必要的插件就可以,不需要更多的配置,因为它有内部约定。如果需要改变配置,例如源代码文件夹、编译打包结果文件夹等等,都是可以改变的。常用插件Maven编译插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration></plugin>命令:

mvncompilePS:该插件是默认插件,如果没有配置,Maven将以1.3级别来编译JAR包生成插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass><!—入口程序--> org.sonatype.mavenbook.weather.Main </mainClass> <addClasspath>true</addClasspath> </manifest> </archive> </configuration></plugin>命令:

mvnjar:jarPS:默认插件,如果需要更多的配置(例如jar档案说明信息、选择性打包等等),可以查看官方文档/plugins/maven-jar-plugin/测试插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration></plugin>作用:可以跳过测试当测试失败仍然执行PS:默认插件,也可以命令后面加上参数跳过测试:-Dmaven.test.skip=true或–DskipTestsJetty插件<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration>

<!--每隔一段时间扫描项目是否更新--> <scanIntervalSeconds>0</scanIntervalSeconds> <connectors> <connectorimplementation="org.eclipse.jetty. server.nio.SelectChannelConnector"> <port>80</port><!--端口--> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration></plugin>插件命令:mvnjetty:run注意:即使是web项目模块,开发时也不要将<packaging>设置为war,否则会产生一个大的war包,编译时间很长。建议只在发布时将其设置为war,发布war后马上改回去。Maven插件总结Maven一切行为都是基于插件完成的artifactId以maven-xxx-plugin形式的是Maven官方插件,一般可以默认使用(不需要配置)Apache提供的Maven插件列表:/plugins/index.htmlCodehaus提供的Maven插件列表:/plugins.html可以开发自己的插件项目,使得Maven功能无限扩展Maven变量自定义属性名称任意。插件预建变量一般以maven.打头,如piler.source为maven-compiler-plugin的变量;Maven内置变量basedir:项目根目录project.xxx:<project>节点下的任意内容,如project.version环境变量以env.打头,引用操作系统的环境变更,如env.JAVA_HOME.Maven变量引用及定义setting.xmlpom.xml变量名变量值,通过${变量名}引用之通过插件预建变量控制插件运行行为<properties>

<piler.source>1.5</piler.source>

<piler.target>1.5</piler.target>

<pilerVersion>1.5</pilerVersion>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration>

<source>1.5</source>

<target>1.5</target>

<encoding>UTF-8</encoding> </configuration></plugin>目录Maven简介Maven基础概念Maven私服依赖,聚合,继承常用插件和自动化部署IDEA下Maven项目开发Maven高级应用导入Maven项目(1/6)(1)File->New...->ProjectFromExistingSources...导入Maven项目(2/6)(2)选择Maven导入Maven项目(3/6)(3)勾选“Searchforprojectsrecursivily”导入Maven项目(4/6)(4)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论