#Maven Maven官网
Maven下载 Maven安装与配置 #Maven安装 ##Windows安装 ###配置Javahtml
sudo apt-get install maven
##CentOS安装java
yum install maven
##Mac OS X安装web
brew insall maven3
##二进制安装 #Maven实战 ##Maven核心概念apache
##人肉式api
##IDE ###eclipsetomcat
##为何是Maven架构
##Maven安装app
##pom.xmleclipse
上面三个称为Maven项目的惟一标示curl
<?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 组织,使用java包式描述 --> <groupId>groupId</groupId> <!-- artifactId 项目标识符(不要使用标点) --> <artifactId>TomcatStudy</artifactId> <!-- 版本号SNAPSHOT会替换时间戳快照,发布 --> <version>1.0-SNAPSHOT</version> <!-- 打包类型war或者jar --> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 存在编译须要而发布不须要的jar包,能够用scope标签,值设为provided --> <scope>provided</scope> </dependency> </dependencies> </project>
##Maven基本命令
##Maven Tomcat插件
#Maven Tomcat实践演示 肯定maven工做正常
mvn
##Maven生成webapp项目 经过模板建立应用。在肯定的项目目录内执行一下命令,建立规范的项目目录树:
命令以下:
mvn archetype:generate -DgroupId=com.netease.restaurant -DartifactId=Restaurant -Dpackage=com.netease -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp
打印以下,程序须要向咱们进行确认:
zhanpeng@GE70:~/Workspace/maven/restaurant$ mvn archetype:generate -DgroupId=com.netease.restaurant -DartifactId=Restaurant -Dpackage=com.netease -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom <<< [INFO] [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] Using property: groupId = com.netease.restaurant [INFO] Using property: artifactId = Restaurant [INFO] Using property: version = 1.0.0-SNAPSHOT [INFO] Using property: package = com.netease Confirm properties configuration: groupId: com.netease.restaurant artifactId: Restaurant version: 1.0.0-SNAPSHOT package: com.netease Y: :
输入y
进行确认,确认以后咱们查看目录结构。
咱们能够看到以下目录树:
zhanpeng@GE70:~/Workspace/maven/restaurant$ tree . └── Restaurant ├── pom.xml └── src └── main ├── resources └── webapp ├── index.jsp └── WEB-INF └── web.xml 6 directories, 3 files
补充创建目录并把以前项目的文件放置到正确位置:
zhanpeng@GE70:~/Workspace/maven/restaurant$ tree . └── Restaurant ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── netease │ │ ├── HelloServlet.java │ │ └── NoodlesServlet.java │ ├── resources │ └── webapp │ ├── index.jsp │ ├── SoybeanMilk.html │ └── WEB-INF │ ├── web.xml └── test └── java 11 directories, 6 files
源代码参考以前代码 ##Maven添加依赖 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> <groupId>com.netease.restaurant</groupId> <artifactId>Restaurant</artifactId> <packaging>war</packaging> <version>1.0.0-SNAPSHOT</version> <name>Restaurant Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> </dependencies> <build> <finalName>Restaurant</finalName> </build> </project>
##Maven添加插件
<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"> ... <dependencies> ... </dependencies> <build> <finalName>Restaurant</finalName> <plugins> <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> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <uriEncoding>UTF-8</uriEncoding> <finalName>Restaurant</finalName> <server>tomcat</server> </configuration> </plugin> </plugins> </build> </project>
##maven-tomcat-plugin运行
mvn tomcat7:run
**注意:**课程给的例子是发生错误,因为serlvet包并无添加<scope>provided</scope>
,注意以下内容的修改:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
运行测试
zhanpeng@GE70:~$ curl http://localhost:8080/Restaurant/noodles <html><body> <h1> Noodles with Tomato</h1> </html></body>
#Maven管理多模块Web项目实战 以前的配置是单个项目,可是在后面的项目内容,更多的是分模块进行项目内容开发。这就涉及到多模块管理与依赖关系描述。多个项目相互依赖很是复杂,maven帮助咱们管理多模块内容。 ##建立子模块
mvn archetype:generate -DgroupId=com.netease.restaurant -DartifactId=Kitchen -Dpackage=com.netease -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart
咱们能够看到目录树变动为:
zhanpeng@GE70:~/Workspace/maven/restaurant$ tree . ├── Kitchen │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ │ └── com │ │ └── netease │ │ └── App.java │ └── test │ └── java │ └── com │ └── netease │ └── AppTest.java └── Restaurant ├── pom.xml ├── Restaurant.iml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── netease │ │ │ ├── HelloServlet.java │ │ │ └── NoodlesServlet.java │ │ ├── resources │ │ └── webapp │ │ ├── index.jsp │ │ ├── SoybeanMilk.html │ │ └── WEB-INF │ │ ├── web.xml │ │ └── web.xml~ │ └── test │ └── java
修改子模块代码
##管理两个子项目的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> <groupId>com.netease.restaurant</groupId> <artifactId>restarant-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <!-- 管理子项目 --> <name>Multi modules demo</name> <modules> <module>Restaurant</module> <module>Kitchen</module> </modules> </project>
备注:正确添加pom.xml文件以后,就可使用idea打开多模块项目 ##修改子模块的pom.xml配置 Kitchen项目的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> <groupId>com.netease.restaurant</groupId> <artifactId>Kitchen</artifactId> <packaging>jar</packaging> <version>1.0.0-SNAPSHOT</version> <name>Kitchen</name> <url>http://maven.apache.org</url> <!-- 添加总管理依赖 --> <parent> <groupId>com.netease.restaurant</groupId> <artifactId>restarant-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
Restaurant项目的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> <groupId>com.netease.restaurant</groupId> <artifactId>Restaurant</artifactId> <packaging>war</packaging> <version>1.0.0-SNAPSHOT</version> <name>Restaurant Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 添加总管理依赖 --> <parent> <groupId>com.netease.restaurant</groupId> <artifactId>restarant-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <dependencies> <!-- 依赖Kitchen --> <dependency> <groupId>com.netease.restaurant</groupId> <artifactId>Kitchen</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>Restaurant</finalName> <plugins> <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> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <uriEncoding>UTF-8</uriEncoding> <finalName>Restaurant</finalName> <server>tomcat</server> </configuration> </plugin> </plugins> </build> </project>
注意:idea开启自动导入包,否则子项目包没法载入
##把包安装到本地仓库
mvn install
到web子项目启动运行:
mvn tomcat7:run
访问测试:
zhanpeng@GE70:~$ curl http://localhost:8080/Restaurant/hello hello world Hello Kitchen
肯定子项目被加载进来 #eclipse方式使用maven ##eclipse安装maven插件 工具栏:help->Install New Software
eclipse neon没法安装插件 ##eclipse导入项目 选择项目
确认导入项目信息
项目导入成功
##eclipse使用maven进行运行 须要执行的Web项目上右键->Run As->Run Configurations
双击Maven Build建立运行内容
注意:Base Directory填写${workspace_loc:/Restaurant}
,Goals填写tomcat7:run
点击运行,并确认运行结果
zhanpeng@GE70:~$ curl http://localhost:8080/Restaurant/hello hello world Hello Kitchen
#Maven FAQ Q: 我执行tomcat7插件相关的操做时,怎么一直报错,提示找不到tomcat7插件?
A: 这个是由于tomcat7插件的groupId不在maven默认的pluginGroups中,解决方法有一下几种:
想了解更多为何会这样,请参考 http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html
Q: 我在实战maven管理多项目的时候,执行mvn tomcat7:run 报了错误,错误信息是“The POM for com.netease.restaurant:Kitchen:jar:1.0.0-SNAPSHOT is missing, no dependency information available”,怎么办?
A: 在多项目管理实战中的这个例子中,Restaurant对Kitchen有依赖,若是你直接在Restaurant这个项目中执行 mvn tomcat7:run的话,因为此时Kitchen尚未放到本地仓库中,所以Restaurant找不到这个Kitchen的依赖,因此报错了。解决方案以下: 1.能够在Kitchen这个项目中执行 mvn install,此时会把这个Kitchen项目安装maven的本地仓库,而后再在Restaurant项目中引用,就能找到了 2.直接在顶层的 restaurant-parent 这个项目下先执行 mvn install,这样的话,顶层的这个父项目会把全部的子项目都安装到本地仓库,并维护好依赖关系