1.Apache软件基金会提供的项目自动化构建和项目管理软件。
基于项目对象模型(POM)概念,Maven利用一个中央信息片段能管理一个项目的构建、报告、文档等步骤。
官方网站:http://maven.apache.org/
2.(1)方便jar包管理;
(2)开发工具不同,项目结构可能不同,maven可统一项目结构;
(3)每个项目都要用的核心代码包(自己写的工具包),单独列出一个工程叫核心包,打成一个jar包,让七八个工程直接引用jar包就行了,但若核心包升级了还得手动更新,maven可以解决该问题;
3.使用前提:
(1)下载
http://maven.apache.org/download.cgi
(2) 配置环境变量 (系统变量)
M2_HOME = maven根路径 PATH = maven根路径/bin (3) 执行maven命令 mvn -v 显示maven版本信息4.bin文件:可执行的文件,
bat文件:批处理文件;
5.maven工程
my-app |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java
6.pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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>com.mycompany.app</groupId> <!--公司所做项目名称--> <artifactId>my-app</artifactId> <!--模块的名称--> <version>1.0-SNAPSHOT</version> <!--版本号--></project>
groupId:公司所做的项目的名称
artifactId:模块的名称 version:版本号 groupId + artifactId + version = 坐标7.编译代码
>d:(切换到d盘)
>cd myapp (进入到某个文件) >mvn compile 编译后产生target目录,里面存放的就是编译后的字节码文件注意:编译只会编译main文件里的Java程序;所以不会编译test文件里的测试程序;
mkdir 新文件夹名称
8.执行单元测试
mvn test http://mvnrepository.com/ (查询坐标) 在pom.xml添加对junit的依赖<!--配置当前项目对第三方jar的依赖-->
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.2</version> </dependency> </dependencies>
9.清除target
mvn clean10.打包 (Java源代码打成jar包)
mvn package11.到本地仓库中
mvn install12.修改本地仓库位置
默认位置在操作的系统的~/.m2文件夹中,修改方式如下: (~:当前用户的文件夹)1. 取消mavenhome/conf/settings.xml配置文件中的注释的该行代码: <localRepository>/path/to/local/repo</localRepository> 2. 将其中的路径修改为自己希望的路径 <localRepository>D:/maven/repo</localRepository> 3. 并将settings.xml文件拷贝一份到D:/maven目录中13.maven查找依赖的顺序
1. 从本地仓库中查找所需要的依赖 2. 从私有仓库中查找所需要的依赖 3. 从中央仓库(http://repo.maven.apache.org/)中查找所需要的依赖 本地仓库→ 私有仓库→ 中央仓库14.没有任何开发工具的情况下使用maven:
使用Archetype快速创建项目
mvn archetype:generate 在输出的交互式命令中输入坐标即可创建 或 mvn archetype:generate -DgroupId=com.kaishengit.pms -DartifactId=myapp2 -Dversion=1.0.0- SNAPSHOT15.eclipse开发工具安装插件:M2Eclipse,然后才能使用maven(版本在10以上该插件是自带的)
使用M2Eclipse插件创建项目
http://eclipse.org/m2e/将下载好的插件→放入dropins文件夹(myeclipse安装路径中的)即可;
注意:Windows→preferences→installations(add配置好环境变量的maven路径)→user settings(首先将maven config文件夹里的settings.xml复制到本地仓库 的路径)settings.xml路径
16.先配好再建maven工程→maven build...→package(打包)→install(将该包发布到本地仓库)
在另一个项目中要引用刚才那个项目的包→在另一个项目的pom.xml中添加依赖(引用包的坐标)
17.maven的聚合 (多个maven项目想要同时执行maven的某个命令:先建一个新的maven项目,但pacakging 选择pom即该项目只有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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kaishengit</groupId> <artifactId>all</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../core</module> <!--通过该pom项目的路径找到core项目的路径--> <module>../dao</module> </modules> </project>18.scope
• compile——编译(默认值,在编译、打包时使用) • provided——编译和测试时使用的依赖,打包时不加入,例如servlet-api.jar • runtime——运行时依赖,编译时不依赖,例如mysql.jar • test——只有测试时依赖,编译和打包时不使用,例如junit.jar
19.若在项目空间添加的Java文件在开发工具中刷新不出来:右键项目→properties→Java build path→source→add folder
20.webapp项目典型的结构(若结构不全自己可以补全,通过19)
---src
---main
---java(源代码文件)
---resources(etc配置文件)
---webapp(webRoot)
---test
---java
---resources
21.maven build → compile package(编译后打包的命令)
得复制到tomcat的webapp下麻烦
22.为了解决21的问题:jetty maven有个插件(wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin)
pom.xml中的build节点的Plugins节点中plugin节点中添加依赖:命令jetty:run
测试用jetty环境
23.改端口号:在pom.xml中添加
web项目
Jetty插件 <build> <finalName>struts</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <webApp> <contextPath>/</contextPath> <!--请求的路径-->localhost:9090/home.do </webApp> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>9090</port> <!--服务器端口号--> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin> </plugins> </build>24.访问私服:http://url:端口号/nexus
25.依赖传递和冲突
• 依赖级别相同时,在dependency前面的会使用 • 依赖级别不相同时,依赖路径短的会使用 • 依赖传递只会传递compile级别的包 • 排除依赖 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.15.1</version> <exclusions> <exclusion> <groupId></groupId> <artifactId></artifactId> </exclusion> </exclusions> </dependency>26.其他配置
<properties> <junit.version>4.11</junit.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency></dependencies>