1. mvn help:describe 你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的. 参数: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”) 下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!
2. mvn archetype:generate 你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.
3. mvn tomcat:run 用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用: 1. 跳过测试:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.
4. mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.
5. mvn dependency:sources 故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了
Maven常用命令
-
mvn archetype:create :创建 Maven 项目
-
mvn compile :编译源代码
-
mvn test-compile :编译测试代码
-
mvn test : 运行应用程序中的单元测试
-
mvn site : 生成项目相关信息的网站
-
mvn clean :清除目标目录中的生成结果
-
mvn package : 依据项目生成 jar 文件
-
mvn install :在本地 Repository 中安装 jar
-
mvn eclipse:eclipse :生成 Eclipse 项目文件
- mvn -Dmaven.test.skip=true : 忽略测试文档编译
-
Maven常用命令
- 检测Maven、JDK版本 mvn –v 或者 mvn -version
- 获取帮助选项 mvn –h 或者 mvn –help
- 显示详细错误信息 mvn –e
- 创建Java项目 mvn archetype:create -DgroupId=${groupId} -DartifactId=${artifactId} 示例:mvn archetype:create -DgroupId=com.howsun -DartifactId=myApp-Dversion=0.1
- 创建Web项目 mvn archetype:create -DgroupId=${packageName} -DartifactId=${webappName} -DarchetypeArtifactId=maven-archetype-webapp
- 创建其它项目(例如SSH、JPA、JSF、Seam…) mvn archetype:generate然后根据提示选择项目骨架、groupid、artifactid、版本号…Maven3已有上百个项目骨架
- 转换成Eclipse工程 mvn eclipse:eclipse mvn eclipse:clean //清除Eclipse设置信息 转换成idea项目:mvn idea:ide
- 编译 mvn compile
- . 编译测试代码 mvn test-compile
- . 产生Site: mvn site
- . 测试 mvn test //运行测试 mvn test -Dtest=${类名} //单独运行测试类
- . 清除 mvn clean //将清除原来编译的结果
- . 打包 mvn packagemvn package –Dmaven.test.skip=true //打包时不执行测试
- . 发布 mvn install //将项目打包成构件安装到本地仓库 mvn deploy //发布到本地仓库或服务器(例如Tomcat、Jboss)
- . 手动添加构件到仓库 mvn install:install-file -Dfile=${jar包文件位置} -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=${版本号} -Dpackaging=jar -DgeneratePom=${是否同时创建pom文件}
- . 复制依赖构件到相应目录 mvn dependency:copy-dependencies -DoutputDirectory=${目标目录} -DexcludeScope=${scope} -Dsilent=true 示例: mvn dependency:copy-dependencies -DoutputDirectory=WebRoot/WEB-INF/lib -Dsilent=true -DincludeScope=runtime
- . 显示一个插件的详细信息(configuration, goals等): mvn help:describe -Dplugin=pluginName –Ddetail
-
工程配置文件 pom.xml
是Maven项目的核心配置文件,位于每个工程的根目录,指示Maven工作的元数据文件。 节点介绍
-
- :文件的根节点 .
- : pom.xml使用的对象模型版本 .
- :创建项目的组织或团体的唯一 Id.
- :项目的唯一 Id, 可视为项目名 .
- :打包类型,一般有JAR,WAR,EAR 等
- :产品的版本号 .
- :项目的显示名,常用于 Maven 生成的文档。
- :组织的站点,常用于 Maven 生成的文档。
- :项目描述,常用于 Maven 生成的文档。
- . :构件依赖:模型继承
- . :依赖管理
- . :创建报告
- . :构建
- . :引用第三方仓库
- . :许可
当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢?
1. 定位到maven根目录下(该目录下必须有pom.xml)。
2. 使用maven命令 mvn eclipse:eclipse
3. 进入到根目录下,你会发现自动生成了熟悉的两个文件:.classpath 和 .project。
4. 打开eclipse,找到该项目路径,导入即可。
3.2. POM
POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息。
<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"> <modelVersion>4.0.0</modelVersion> <groupId>org.codehaus.mojo</groupId> <artifactId>my-project</artifactId> <version>1.0</version> </project>
modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。
groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
version 当前项目产生的artifact的版本
以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。
<project> <modelVersion>4.0.0</modelVersion> <!- The Basics 项目的基本信息-> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <packaging>...</packaging> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules>...</modules> <properties>...</properties> <!- Build Settings 项目的编译设置-> <build>...</build> <reporting>...</reporting> <!- More Project Information 其它项目信息 -> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- Environment Settings -> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
project是pom.xml的根节点,至于其它元素请参考POM Reference
POM有3个很重要的关系:依赖、继承、合成。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <type>jar</type> <scope>test</scope> <optional>true</optional> </dependency> ... </dependencies>
如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依赖关系加进去即可。
另一个强大的变化, maven带来的是项目继承。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <packaging>pom</packaging> </project>
packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:
mvn help:effective-pom
就可以了。
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-child-project</artifactId> <parent> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <relativePath>../my-parent</relativePath> </parent> </project>
relativePath可以不需要,但是用于指明parent的目录,用于快速查询。
一个项目有多个模块,也叫做多重模块,或者合成项目。 如下的定义:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mygroup </groupId> <artifactId>my-parent</artifactId> <version>2.0</version> <modules> <module>my-child-project1<module> <module>my-child-project2<module> </modules> </project>
其中module 描述的是子项目的相对路径 。
Maven 还我们提供了一个dependencyManagement元素,用来提供了一种方式来统一依赖版本号。dependencyManagement元素一 般用在顶层的父POM。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。 Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个 dependencyManagement元素中指定的版本号,这样就解决了修改依赖版本号不完全的问题。
Maven的Profile元素可以为一个特殊的环境自定义一个特殊的构建,使得不同环境间构建的可移植性成为可能。比如要使用 production profile来运行mvn install,你需要在命令行传入-Pproduction参数,这里production是profile的id。要验证production profile覆盖了默认的Compiler插件配置,可以像这样以开启调试输入(-X) 的方式运行Maven。
Maven 安装 JAR 包的命令是:
mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar
例如:
我下载的这个 jar 包是放到了 D:\mvn 目录下(D:\mvn\spring-context-support-3.1.0.RELEASE.jar)
那么我在 cmd 中敲入的命令就应该是:
mvn install:install-file -Dfile=D:\mvn\spring-context-support-3.1.0.RELEASE.jar -DgroupId=org.springframework -DartifactId=spring-context-support -Dversion=3.1.0.RELEASE -Dpackaging=jar
回车,显示安装成功:Maven : 将Jar安装到本地仓库和Jar上传到私服
举例
1. 依赖如下:
<dependency> <groupId>org.quartz-scheduler.internal</groupId> <artifactId>quartz-terracotta-bootstrap</artifactId> <version>2.2.2-SNAPSHOT</version> </dependency>
将Jar包安装到本地仓库命令:
mvn install:install-file -Dfile=D:\quartz-terracotta-bootstrap-2.2.2-SNAPSHOT.jar -DgroupId=org.quartz-scheduler.internal -DartifactId=quartz-terracotta-bootstrap -Dversion=2.2.2-SNAPSHOT -Dpackaging=jar
-- DgroupId和DartifactId构成了该jar包在pom.xml的坐标, 对应依赖的DgroupId和DartifactId
-- Dfile表示需要上传的jar包的绝对路径
-- Dpackaging 为安装文件的种类2. 上传Jar到私服
命令:
mvn deploy:deploy-file -DgroupId=org.terracotta.toolkit -DartifactId=terracotta-toolkit-api-internal -Dversion=1.12 -Dpackaging=jar -Dfile=D:\terracotta-toolkit-api-internal-1.12.jar -Durl=http://ip:port/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
-- DgroupId和DartifactId构成了该jar包在pom.xml的坐标, 对应依赖的DgroupId和DartifactId
-- Dfile表示需要上传的jar包的绝对路径
-- Durl私服上仓库的url精确地址(打开nexus左侧repositories菜单,可以看到该路径)
-- DrepositoryId服务器的表示id,在nexus的configuration可以看到