Maven

安装

  • 官网下载压缩包,解压,设置环境变量
  • 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!!!!

你可能感兴趣的:(Maven)