安装
- 官网下载压缩包,解压,设置环境变量
- M2_HOME -> D:\apache-maven-3.3.9
- path -> %M2_HOME%\bin;
- mvn -version 进行验证
命令
- 以下命令实在根目录下执行,第一次执行都会下载以下依赖的库
- mvn help:effective-pom 查看项目实际生效的POM,我在Eclipse建的目录下可以成功运行,在命令行建的项目里不能运行 ???
- mvn archetype:generate 插件名:目标名 执行archetypy插件的generate目标 archetype是指项目的骨架
- mvn pluginId:goalId 目标是一个工作单元,插件是多个目标的集合
- mvn clean 会清理到原来打的包
- mvn package 打包,可以查看绑定标准插件目标到默认的生命周期
- mvn site 创建站点报告
- mvn clean site 删除site以外的target中的文件
- mvn tomcat:run 启动tomcat
- mvn tomcat7:run 使用tomcat7插件
- mvn jetty:run
- mvm clean package 重新打包
命令行 helloworld
- 新建文件夹 maven,并进入目录
- mvn archetype:generate archetype插件是项目模板工具,自动生成各种项目的默认结构
- 第一次运行比较慢,要下载很多核心的插件,最后会显示maven仓库中有多少个项目原型,然后会提供一个项目编号
- 选择最新版本,输入groupId:com.coder352 和 artifactId:mvnstudy 项目的唯一标识,对应项目的名称
- 然后输入项目的版本号:Enter 选择默认的1.0 SNAPSHOT
输入package 默认为groupId,选择默认回车
进入刚才的artifactId创建mvnstudy,运行命令行 mvn package ,出现BUILD SUCCESS 表示打包成功,目录下会多出一个target目录
- java -cp target/mvnstudy-1.0-SNAPSHOT.jar com.coder352.App 其中cp参数和classpath相同,指定需要依赖的类库 && com.coder352.App 的路径是target/classes/com/coder352/App.class
- 或者进入target目录,java -cp mvnstudy-1.0-SNAPSHOT.jar com.coder352.App
- 或者在进入classes java com.coder352.App 应为mvnstudy-1.0-SNAPSHOT.jar中就有com.coder352.APP
Eclipse helloworld
- New Project -> Default Workspace -> Archetype(原型选择) filter:quick -> Group.. just as above -> Finish
- 打开src/main/java 中com.coder352.mvnstuy App.java
- 下面是打包文件
- Run -> Run Configuration -> Maven Build -> 右键
- Name: mvn_study && Base directory: mvnsudy(Browse Workspace) && Goals: package -> Apply && Run
- 刷新项目,出现target/mvnstudy-1.0-SNAPSHOT.jar
- 很不理解为什么需要两次才能SUCCESS,命令行中也是
配置Maven插件
- Windows -> Preference -> Maven -> Installations -> Add
- 选择自己从官方下载的maven压缩包解压出来的目录
- 退出,选择自己安装的maven,不要用eclipse默认的maven
- Maven -> User Settings 选择全局配置文件,在安装目录中的conf/settings.xml
- Preference -> Maven 选择Download Artifact(依赖的) Sources 和 JavaDoc
修改本地仓库路径
- 默认在user/codeer353/.m2/
- 修改本地仓库的位置:conf/settings.xml
- 取消localRespository的注释,并将下面的路径改为自己的路径
配置远程仓库
- 在pom.xml中标签后添加
<repositories>
<repository>
<id>oschina</id>
<name>oschina repository</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</repository>
</repositories>
项目站点报告
- mvn site -> cd target -> 生成新的目录:site
- 打开index.html,在标签下面添加
<description>这是一个测试项目</description>
<url>http://maven.apache.org</url>
<organization>
<name>coder352</name>
<url>microsofr.com</url>
</organization>
<developers>
<developer>
<id>coder352</id>
<name>coder352</name>
</developer>
</developers>
- 在最后的标签上面添加配置信息
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<locales>zh_CN</locales>
</configuration>
</plugin>
</plugins>
</build>
- mvn clean site -> 打开target/site/index.html
- 会看到除了site,其他的都已经被删除了,site也已经更新了
maven 创建Web项目 比较传统
- 在maven目录中mvn archetype:generate
- 输入web过滤可选项目原型,选择67: remote -> org.codehaus.mojo.archetypes:webapp-javaee7 (Archetype for a web application using Java EE 7.)
- 选择1.1版本 && groupId: com.coder352 && artifactId: helloweb && 版本号: 默认 && package: default
- cd helloweb && mvn package && 将target/helloweb-1.0-SNAPSHOT.war 放到Tomcat的tomcat/webapps下
- 在Tomcat的tomcat-users.xml文件中的哪些注释了的role下面添加
- 启动Tomcat,访问localhost:8080 登陆进去就可以查看了
使用Tomcat的maven插件
- 打开pom.xml 添加一个plugins标签里最后添加plugin标签
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
- 返回项目根目录 mvn tomcat:run && localhost:8080/helloweb
- 返回项目根目录 mvn tomcat7:run && localhost:8080/helloweb
使用Jetty运行Web项目
- 打开pom.xml 添加一个plugins标签里最后添加plugin标签
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
- maven jetty:run && localhost:8080 Jetty插件把项目直接部署到了根目录下
添加J2EE依赖
- 打开pom.xml 添加Servlet API && 在dependencies标签的最后添加一个
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope> <!-- 设置provided的依赖范围,告诉maven,jar文件已经由容器提供了,不需要打包到war文件中 -->
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId> <!-- 添加jsp规范的依赖 -->
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId> <!-- 添加jstl规范的依赖 -->
<version>1.2</version>
<scope>provided</scope>
</dependency>
- 回到根目录 mvn clean package 如果显示SUCCESS则语法没有问题
- 如果不行,多试几次,卡住了按回车
- 查看/target/helloweb-1.0-SNAPSHOT/WEB-INF/目录下有没有lib目录,如果没有,把上面三个scope注释掉,重新打包mvn clean package
- 再取消注释
创建JSP和Servlet
- 进入src/main/webapp 创建jsp文件 && touch index.jsp && 可以把index.html的内容复制进去,修改title为 first jsp
- cd src/main/java/com/coder352 && touch HelloServlet.java && 编辑输入
package com.coder352;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
out.println("hello world");
out.flush();
out.close();
}
}
- cd main/webapp && mkdir WEB_INF && cd WEB-INF && touch web.xml && 编辑
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.coder352.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
- mvn clean package && mvn jetty:run && localhost:8080/helloServlet
- 我的target文件夹clean删不掉,把里面的东西全删干净,接着mvn package….OK!!!
在 Eclipse 中使用 Maven 构建 Web 项目 *这里有bug还没改
- New Maven Project -> Workspace: Default -> Archetype: filter(web) && org.apache.maven.archetype -> Group Id: com.coder352 && Artifact Id: helloweb -> Finish
- 默认没有创建src/main/java文件夹,自己创建一个
- 右键src/main/java -> New Class -> package: com.coder352 && Class: HelloServlet -> Finish
- 把上面的HelloServlet的代码复制过来 && 会出现好多错误提示,因为pom.xml中没有配置servlet的API依赖
- 把依赖标签中的所有都替换掉
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
- 把jetty插件的配置也复制过来,在命令行创建的pom.xml的最后那个plugin里
- 放到eclipse里的pom.xml的最后一个标签里的最后面
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
</plugins>
- Run Configuration -> Maven Build && 右键New -> Name: mvn_helloweb && Base directory: helloweb(Browse Workspace) && Goals: jetty:run && 勾选 Skip Tests -> Apply && Run
- 有Bug,!!!!!,会报错,把上面的命令行生成的导入到eclipse中运行,OK!!!!