1. Maven介绍
1.1. 简介
java编写的用于构建系统的自动化工具。
目前版本是2.0.9,注意maven2和maven1有很大区别,阅读第三方文档时需要区分版本。
1.2. Maven资源
见官方网站;
The 5 minute test,官方简易入门文档;
Getting Started Tutorial,官方入门文档;
Build Cookbook,官方的cookbook;
POM Reference,POM文件的设置参考
Settings Reference ,settings文件的设置参考
Better Builds with Maven,免费的电子书,下载需要注册。
1.3. Maven和Ant的区别
Maven正在逐渐取代Ant,很多java开源软件(Spring、Struts2 ……)已经使用maven。
不需要写复杂的处理脚本;
声明式的类库依赖管理。
1.4. Maven的基本功能
构建:比如生成class、jar、war或者ear文件
生成文档:比如生成javadoc、网站文档
生成报告:比如junit测试报告
生成依赖类库:生成文档,说明项目多其他软件的依赖
有关SCM:SCM(Software Configuration Management),软件配置管理,比如版本控制,比如bug管理等等
发布:生成供发布的分发包,比如生成Struts2的分发包,供提交给用户使用
部署:比如,web应用程序,自动部署到指定的服务器上
通过我写的商品管理的小例子,演示结合maven和svn的功能。
2. Maven使用
2.1. Maven的安装和配置
从官方网站下载最新的Maven分发包http://maven.apache.org/download.html,当前为2.0.9;
解压缩到本地;
配置maven, 将maven/bin目录设置到windows环境变量Path中
检查maven是否安装成功, 在命令行中执行
mvn -version
2.2. Maven的基本使用
Maven的基本使用介绍通过命令行编写简单的java和web项目。
2.2.1. 实现Java项目
通过maven在命令行下创建普通java项目,也就是main方法执行的项目或者jar文件的类库。
2.2.1.1. 创建Maven项目
执行:
mvn archetype:generate
在交互界面中:
Choose a number: 回车即可,也就是选择15
Define value for groupId: 输入组织id,比如easymorse.com
Define value for artifactId:输入项目名称,比如helloworld
Define value for version: 输入版本号,可以直接回车,默认是1.0-SNAPSHOT
Define value for package: java的包名,比如com.easymorse
然后回车表示确认上述输入即可。
观察helloworld目录(Define value for artifactId输入的项目名称)下生成的文件和目录:
项目构建文件: pom.xml
代码框架: src\main\java\com\easymorse\App.java
测试代码: src\test\java\com\easymorse\AppTest.java
2.2.1.2. 运行Maven项目
命令行进入helloworld目录Define value for artifactId输入的项目名称)。
项目打包
mvn package
检查命令生成了什么?
target目录
编译了代码
编译了测试代码
使用junit测试并生成的报告
生成代码的jar文件
运行打包的jar文件:
java -cp target\helloworld-1.0-SNAPSHOT.jar com.easymorse.App
编译源程序
mvn compile
编译并测试
mvn test
清空生成的文件
mvn clean
将maven项目转化为eclipse项目
命令行运行:
mvn eclipse:eclipse
打开eclipse,菜单选择:file>import>general>existing projects into workspace,在对话框中选中目录,导入即可。
如果要清除有关eclipse项目的配置信息:
mvn -Dwtpversion=1.0 eclipse:clean
联合使用
mvn eclipse:clean clean
2.2.2. 实现Web项目
通过maven在命令行下创建java web项目。
2.2.2.1. 创建Maven项目
在命令行输入,这一步和创建java项目类似:
mvn archetype:generate
交互步骤说明:
Choose a number: 回车即可,也就是选择18,这里和java普通项目不一样
Define value for groupId: 输入组织id,比如easymorse.com
Define value for artifactId:输入项目名称,比如helloworld
Define value for version: 输入版本号,可以直接回车,默认是1.0-SNAPSHOT
Define value for package: java的包名,比如com.easymorse
然后回车表示确认上述输入即可。
需要在pom.xml文件中增加servlet容器的插件:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.6</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
tomcat插件
jetty插件
编译插件的配置
repository目录的作用
repository的位置,在用户目录的.m2目录下。
repository目录的作用,对依赖类库的缓存。
2.2.2.2. 运行Maven项目
项目打包
mvn package
启动tomcat
mvn tomcat:run
启动jetty
mvn jetty:run
转化为eclipse项目
mvn -Dwtpversion=1.5 eclipse:eclipse
这样生成wtp插件的web项目。
打开eclipse,菜单选择:file>import>general>existing projects into workspace,在对话框中选中目录,导入即可。
另外,需要在eclipse里创建一个classpath变量,名称为:M2_REPO,值为系统用户下.m2/repository目录。
3. POM文件的基本配置
3.1. POM介绍
3.1.1. 什么是POM
Project Object Model,项目对象模型。
通过xml格式保存的pom.xml文件。
作用类似ant的build.xml文件,功能更强大。
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
3.1.2. 快速浏览
一个完整的pom.xml文件,放置在项目的根目录下。
<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/maven-v4_0_0.xsd"> <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>
3.2. 基本设置
3.2.1. 协作关系
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.codehaus.mojo</groupId> <artifactId>my-project</artifactId> <version>1.0</version> <packaging>war</packaging> </project>
groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par
3.2.2. POM间关系
3.2.2.1. 依赖关系
依赖关系列表(dependency list)是POM的重要部分。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> ... </dependencies>
groupId , artifactId , version :
scope : compile(default),provided,runtime,test,system
exclusions
如何查到依赖的类库?
一般可以通过这个网站:http://www.mvnrepository.com
比如查询hibernate,可以找到结果列表中的hibernate类库条目。
点击:http://www.mvnrepository.com/artifact/org.hibernate/hibernate,
选择版本,比如3.2.6ga,即:http://www.mvnrepository.com/art ... /hibernate/3.2.6.ga
复制文章中的:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.6.ga</version> </dependency>
到pom.xml文件中即可。
是否还需要找到hibernate依赖的pom?
不需要,hibernate也会有pom,maven会通过它的pom自动找到它依赖的类库。
3.2.2.2. 继承关系
继承其他pom.xml配置的内容。
maven提供了一个类似java.lang.Object的顶级父pom.xml文件。
可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pom
创建一个各种项目可复用的pom.xml文件:http://easymorse.googlecode.com/svn/trunk/pom/pom.xml
部署要复用的pom.xml文件:
mvn install
在自己的pom文件中继承上述pom:
<parent> <groupId>com.easymorse</groupId> <artifactId>pom</artifactId> <version>0.1</version> </parent>
3.2.2.3. 聚合关系
用于将多个maven项目聚合为一个大的项目。
比如目录结构如下:
. |-- pom.xml |-- module-a `-- pom.xml |-- module-b `-- pom.xml |-- module-c `-- pom.xml |-- foo-all `-- pom.xml
那么总的pom.xml文件类似:
... <modules> <module>module-a</module> <module>module-b</module> <module>module-c</module> <module>foo-all</module> </modules> </project>
参考文档:http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html
原文示例有误,见:modules.rar
3.2.3. 其他配置
maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。
有以下分类:
env.X:操作系统环境变量,比如${env.PATH}
project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo- installs</installDir></properties>,引用方式:${installDir}
3.3. 其他
3.3.1. 设置离线
在.m2目录下创建settings.xml文件(如果没有的话)
<settings 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/settings-1.0.0.xsd"> <offline>true</offline> </settings>
3.3.2. 安装第三方包
经常有第三方包,因为一些原因,在网上repository上没有,需要自己动手安装。
比如sun某些版本的jar文件,比如oracle的驱动。
已oracle驱动程序为例,比如驱动路径为c:/driver/ojdbc14.jar,是10.2.0.3.0版本
在该网址能够查到:http://www.mvnrepository.com/artifact/com.oracle/ojdbc14 artifactId和groupId。
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=c:/driver/ojdbc14.jar
这样就可以在pom中依赖引用了:
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency>
3.3.3. 部署到tomcat
tomcat配置有管理权限的用户:conf\tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager"/> <user username="marshal" password="password" roles="manager"/> </tomcat-users>
在pom文件的tomcat插件中添加:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <url>http://localhost:8080/manager</url> <server>myserver</server> <path>/mycontext</path> </configuration> </plugin>
在.m2/settings.xml文件中增加:
<settings 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/settings-1.0.0.xsd"> <servers> <server> <id>myserver</id> <username>marshal</username> <password>password</password> </server> </servers> </settings>
运行打包部署,在maven项目目录下:
mvn tomcat:deploy
然后访问:http://localhost:8080/mycontext/ 即可。
撤销部署:
mvn tomcat:undeploy
启动web应用:
mvn tomcat:start
停止web应用:
mvn tomcat:stop
重新部署:
mvn tomcat:redeploy
部署展开的war文件:
mvn war:exploded tomcat:exploded
3.3.4. 未讲到的内容
settings.xml的配置
pom.xml的详细配置
自定义插件的方法:http://maven.apache.org/plugins/maven-archetype-plugin/examples/archetype.html
自定义goal的执行:<preGoal><postGoal>
插件的查询和使用
搭建镜像repository
在maven中调用ant
1.Maven 2 Repository
Eclipse需要知道Maven的本地仓库的路径。所以,类路径变量M2_REPO必须设置。执行以下命令
分享到:
相关推荐
maven范例创建Maven项目完成打印输出 dos 命令行。想不要分的,自用
Tool Wrapper是一个基于Java的应用程序,用于为命令行工具创建Web Service包装器项目。 基于XML工具描述,该应用程序为该工具创建一个maven项目,其中包括Web服务和Web服务操作,这些操作允许通过SOAP,RESTless和...
根据慕课网的学习,写啦一个类似的用maven运用springmvc的简单实例 使用jetty进行测试 在命令行进入该项目 输入:mvn jetty:run
Ksar2 是一个独立的 Java 应用程序,它允许创建由 Unix/Linux sa/sar 命令生成的数据图。 如果您只想运行该应用程序,请从发布页面下载 JAR 文件并使用java -jar <JAR FILE NAME>. 使用-h选项检查命令行参数。需要...
(3)cmd,命令行输入mvn -v,出现下面结果即环境变量配置成功 3 修改maven连接仓库为本地仓库 打开 解压路径下的apache-maven-3.3.9下的conf文件夹中的settings.xml 4 myeclipse中配置maven window–>Preferences...
Apache Maven(命令行)创建一个简单的Java项目名称:mvn-cmd :grinning_face_with_smiling_eyes:步骤1:建立Java专案Syntax: mvn archetype:generate -DgroupId=...Only two things are of concern:1) Grou
第一步:使用maven命令行创建web项目。 mvn archetype:create -DgroupId=com.lemon.bar -DartifactId=library -DarchetypeArtifactId=maven-archetype-webapp 注释:使用 :set number 在 vim 中显示行号。 ...
在PostgreSQL中手动创建测试数据库 要运行插件,您需要运行命令 mvn liquibase:update PERSON表应显示在测试数据库中,以及Liquibase插件的2个服务表 要回滚,请在命令行中运行 mvn liquibase:rollback -...
使用命令行创建挂毯项目的步骤创建挂毯示例应用程序的步骤 => STEP-1在你的系统中安装 maven。 您必须有 Maven 才能从挂毯创建示例项目。 STEP-2一旦你安装了 maven 然后运行这个命令 =>> mvn archetype:generate -...
名称解析器-cli GBIF 科学名称解析器库的 Java 命令行界面 ... jar 文件将在目标文件夹下创建。 光盘目标 执行命令 java -jar name-parser-cli.jar "Poa pratensis L. subsp. sergievskajae (Probat.) Tzvelev
Java安全性该存储库包含几个Java Web应用程序和命令行应用程序,涵盖了不同的安全主题。 看看我的和涵盖了该存储库中的大多数应用程序。... 使用mvn clean verify jib:dockerBuild创建mvn clean verify jib:dockerB
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 :条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...
从创建的目录中运行 maven 包mvn 清洁包RESTfulJSONDev3l.war 可以部署到选择的容器 我的个人 OpenShift 服务器 我也部署了项目使用Maven解决依赖,创建eclipse动态web项目和类/项目文件mvn eclipse:eclipse -...
客户网络服务 ##准备: 安装Maven并确保将其添加到PATH( ) 安装Tomcat( ) 安装PostgreSQL( ) 使用pgAdmin,创建一个名... 使用命令行导航到项目根文件夹。 运行以下命令: mvn package mvn tomcat:run 希
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 2.学习git maven的使用方法 学习控制语句 使用 LeetCode 上的一些和当前所学内容相关的...
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 :条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 :条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 :条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...
上创建项目 创建 maven 项目,常见的配置,如何在 pom.xml 加入依赖项目 maven 编译 git 提交代码到 github 你创建的项目上 :条件、循环、循环嵌套等 使用 LeetCode 上的一些和当前所学内容相关的算法题来作为课堂...