maven常用命令
mvn compile 编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,可能会比较费时间。
mvn test-compile 编译测试代码,compile之会后生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下。
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除目标目录中的生成结果
mvn package 依据项目生成jar文件,打包之前会进行编译,测试。
mvn install 在本地Repository中安装jar。
mvn eclipse:eclipse 生成Eclipse项目文件及包引用定义,注意,需确保定义classpath variables:M2_REPO,指向本地maven类库目录。
创建maven项目命令
mvn archetype:generate 列出所有可用的模板供选择并创建
mvn dependency:analyze 使用maven Dependency插件进行优化
mvn dependency:resolve 已解决依赖的列表
mvn dependency:tree 项目的整个依赖树
mvn install -X 查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件(慎用,输出信息巨大)
mvn scm:checkin -Dmessage="Message" 提交
mvn scm:checkout 检出
mvn scm:update 更新
mvn help:effective-pom 查看项目的有效pom
mvn help:effective-pom > mypom.xml 可以把项目的有效pom放入mypom.xml里面去。以供查看
mvn help:active-profiles 列出活动的profile
mvn test -Dtest=MyTest 只能src.test.java下的MyTest类进行测试
mvn test -Dtest=MyTest -DfailIfNoTests=false 如果测试类里没有测试方法不报错
mvn package -Dmavne.test.skip=true 打包之前不执行单元测试
生成项目
mvn archetype:create -DgroupId=com.myproject.app -DartifactId=myproject -DpackageName=com.myproject.mavenbook 用archetype插件快速创建一个组名为com.myproject.app artifactId为myproject 项目包目录结构为com/myproject/mavenbook的java项目
mvn archetype:create -DgroupId=com.myproject.app -DartifactId=myproject -DpackageName=com.myproject.mavenbook -DarchetypeArtifactId=maven-archetype-webapp 用archetype插件快速创建一个组名为com.myproject.app artifactId为myproject 项目包目录结构为com/myproject/mavenbook的web-app项目
作者:zhuxinhua 发表于2010-8-4 16:10:00
原文链接
阅读:999 评论:0
查看评论
|
[原]maven核心,pom.xml详解 |
什么是pom?
快速察看: <name>...</name> <url>...</url>
基本内容: POM包括了所有的项目信息 groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo artifactId:项目的通用名称 version:项目的版本 packaging:打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par name:用户描述项目的名称,无关紧要的东西,可选 url:应该是只是写明开发团队的网站,无关紧要,可选 classifer:分类 其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。一般情况下,前面三项就可以组成项目的唯一坐标了。
POM关系:主要为依赖,继承,合成 依赖关系: <dependencies>
<dependency> <groupId>com.alibaba.china.shared</groupId> <artifactId>alibaba.apollo.webx</artifactId> <version>2.5.0</version> <exclusions> <exclusion> <artifactId>org.slf4j.slf4j-api</artifactId> <groupId>com.alibaba.external</groupId> </exclusion> .... </exclusions> ...... </dependencies> 其中groupId, artifactId, version这三个组合标示依赖的具体工程,而且 这个依赖工程必需是maven中心包管理范围内的,如果碰上非开源包,maven支持不了这个包,那么则有有三种 方法处理: 1.本地安装这个插件install plugin 例如:mvn install:intall-file -Dfile=non-maven-proj.jar -DgroupId=som.group -DartifactId=non-maven-proj -Dversion=1 2.创建自己的repositories并且部署这个包,使用类似上面的deploy:deploy-file命令, 3.设置scope为system,并且指定系统路径。
dependency里属性介绍: type:默认为jar类型,常用的类型有:jar,ejb-client,test-jar...,可设置plugins中的extensions值为true后在增加 新的类型, scope:是用来指定当前包的依赖范围,maven的依赖范围 optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。 exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion. exclusion:是将B从依赖树中删除,如上配置,alibaba.apollo.webx不想使用com.alibaba.external ,但是alibaba.apollo.webx是集成了com.alibaba.external,r所以就需要排除掉.
如果一个工程是parent或者aggregation(即mutil-module的)的,那么必须在packing赋值为pom,child工程从parent继承的包括:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration parent的使用方法如下: <parent> relativePath是可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前.
dependencyManagement:是用于帮助管理chidren的dependencies的。例如如果parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以集中管理 依赖的详情
modules:对于多模块的project,outer-module没有必需考虑inner-module的dependencies,当列出modules的时候,modules的顺序是不重要的,因为maven会自动根据依赖关系来拓扑排序, modules例子如下 : <module>my-project</module> <module>other-project</module>
properties:是为pom定义一些常量,在pom中的其它地方可以直接引用。 定义方式如下:
<properties> <file.encoding>UTF-8</file_encoding> <java.source.version>1.5</java_source_version> <java.target.version>1.5</java_target_version> </properties> 使用方式 如下 : ${file.encoding}
还可以使用project.xx引用pom里定义的其它属性:如$(project.version}
build设置: defaultGoal:默认的目标,必须跟命令行上的参数相同,如:jar:jar,或者与时期parse相同,例如install directory:指定build target目标的目录,默认为$(basedir}/target,即项目根目录下的target finalName:指定去掉后缀的工程名字,例如:默认为${artifactId}-${version} filters:用于定义指定filter属性的位置,例如filter元素赋值filters/filter1.properties,那么这个文件里面就可以定义name=value对,这个name=value对的值就可以在工程pom中通过${name}引用,默认的filter目录是${basedir}/src/main/fiters/ resources:描述工程中资源的位置
<resource>
targetPath:指定build资源到哪个目录,默认是base directory filtering:指定是否将filter文件(即上面说的filters里定义的*.property文件)的变量值在这个resource文件有效,例如上面就指定那些变量值在configuration文件无效。 directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources includes:指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件。 excludes:指定不包含在内的patterns,如果inclues与excludes有冲突,那么excludes胜利,那些符合冲突的样式的文件是不会包含进来的。 testResources:这个模块包含测试资源元素,其内容定义与resources类似,不同的一点是默认的测试资源路径是${basedir}/src/test/resources,测试资源是不部署的。
plugins配置: <plugin> extensions:true or false, 决定是否要load这个plugin的extensions,默认为true. inherited:是否让子pom继承,ture or false 默认为true. configuration:通常用于私有不开源的plugin,不能够详细了解plugin的内部工作原理,但使plugin满足的properties dependencies:与pom基础的dependencies的结构和功能都相同,只是plugin的dependencies用于plugin,而pom的denpendencies用于项目本身。在plugin的dependencies主要用于改变plugin原来的dependencies,例如排除一些用不到的dependency或者修改dependency的版本等,详细请看pom的denpendencies. executions:plugin也有很多个目标,每个目标具有不同的配置,executions就是设定plugin的目标, <execution> id:标识符 goals:里面列出一系列的goals元素,例如上面的run goal phase:声明goals执行的时期,例如:verify inherited:是否传递execution到子pom里。 configuration:设置execution下列表的goals的设置,而不是plugin所有的goals的设置
pluginManagement配置: pluginManagement的作用类似于denpendencyManagement,只是denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin。与pom build里的plugins区别是,这里的plugin是列出来,然后让子pom来决定是否引用。 例如: <pluginManagement> <plugins>
build里的directories:
<sourceDirectory>${basedir}/src/main/java</sourceDirectory> 这几个元素只在parent build element里面定义,他们设置多种路径结构,他们并不在profile里,所以不能通过profile来修改
build 里面的Extensions:
reporting设置: reporting包含site生成阶段的一些元素,某些maven plugin可以生成reports并且在reporting下配置。例如javadoc,maven site等,在reporting下配置的report plugin的方法与build几乎一样,最不同的是build的plugin goals在executions下设置,而reporting的configures goals在reporttest。 excludeDefaults:是否排除site generator默认产生的reports outputDirectory,默认的dir变成:${basedir}/target/site report sets:设置execution goals,相当于build里面的executions,不同的是不能够bind a report to another phase,只能够是site <reporting>
更多项目信息: name:项目除了artifactId外,可以定义多个名称
Licenses 列出本工程直接的licenses,而不要列出dependencies的licenses
配置组织信息:
很多工程都受到某些组织运行,这里设置基本信息
配置开发者信息: 例如:一个开发者可以有多个roles,properties是
环境设置: issueManagement:bug跟踪管理系统,定义defect tracking system缺陷跟踪系统,比如有(bugzilla,testtrack,clearquest等). 例如: <issueManagement>
仓库: Repositories:pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用 的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。 repositories:要成为maven2的repository artifact,必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactId-version.pom <repositories> release和snapshots:是artifact的两种policies,pom可以选择那种政策有效。 checksumPolicy:当Maven的部署文件到仓库中,它也部署了相应的校验和文件。您可以选择忽略,失败,或缺少或不正确的校验和警告。 layout:maven1.x与maven2有不同的layout,所以可以声明为default或者是legacy(遗留方式maven1.x)。
插件仓库: pluginRepositories:与Repositories具有类似的结构,只是Repositories是dependencies的home,而这个是plugins 的home。
分发管理: distributionManagement :管理distribution和supporting files。 downloadUrl:是其他项目为了抓取本项目的pom’s artifact而指定的url,就是说告诉pom upload的地址也就是别人可以下载的地址。
profiles:pom4.0的一个新特性就是具有根据environment来修改设置的能力 它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。那么结构如下:
激活profile的方法有多个:setting文件的activeProfile元素明确指定激活的profile的ID,在命令行上明确激活Profile用-P flag 参数
作者:zhuxinhua 发表于2010-8-4 17:00:00
原文链接
阅读:4453 评论:1
查看评论
|
[原]mave的依赖范围 |
compile(编译范围) compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范 围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围) provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果 你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编 译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个 Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在 编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
runtime(运行时范围) runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你 可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实 现。
test(测试范围) test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运 行阶段可用。
system(系统范围) system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中 JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库 的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。。如 果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注 意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用 依赖)。
|
maven常用命令集
最新推荐文章于 2024-06-26 18:00:00 发布