Maven详解

来源:互联网 发布:尤易软件 编辑:程序博客网 时间:2024/04/30 06:43

(一)环境搭建

Maven是可以用于任何基于Java的项目建设和管理的工具,使得Java开发人员的日常工作变得更加容易和简捷。

  1、安装JDK

    1)下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    2)安装好,配置JDK环境变量。右键 我的电脑 --->属性--->高级--->环境变量。

      2.1)新建一个系统变量,变量名为 JAVA_HOME ,值为JDK的安装目录。

 

                                                                

      2.2)找到名为Path的变量,然后编辑,在其变量值后添加 %JAVA_HOME%\bin,注意和前面的值用分号;隔开。

 

                                                                

     2.3)在命令行下执行:java -version,显示下面内容,说明环境变量配置成功。

                       

  

  2、安装Maven

    1)下载Maven:http://maven.apache.org/download.html

    2)将下载的发布包解压。

     3)配置Maven的环境变量。

      3.1)新建系统变量,变量名为:M2_HOME,变量值为Maven的解压路径。

 

                      

      3.2)找到Path变量,在其值后追加%M2_HOME%\bin,注意和前面的值用分号;隔开。

                      

      3.3)在命令行下执行:mvn -v,看到类似下面的内容,配置成功。

                          

  

  4、Maven的目录介绍

                      

    1)bin : 存放mvn运行的脚本。

    2)boot :只有一个jar文件,是Maven使用的类加载器框架。

     3)conf :只有settings.xml文件,修改该文件,可以全局的配置Maven的行为属性。

           4)lib :Maven运行时所需类库。  

 

  5、转移仓库目录

    在系统盘的用户目录下,会有一个名为:.m2 的文件夹,在.m2文件夹下,有一个叫repository的文件夹。

    我这里是:C:\Documents and Settings\Administrator\.m2\repository

    repository文件夹是用来存放下载的jar的,项目中用到的jar包会先到这个目录下找,找不到就从网络上下载到这个目录。随着时间的推移项目的增多,这个目录里面的jar文件会越来越多,如果系统盘空间吃紧,可以把repository文件夹移动其他分区盘。我这里把repository目录移动到:D:\Maven\repository,然后把Maven解压目录下的conf文件夹里面的setting.xml复制.m2目录中,这样就可以在用户范围上配置Maven的行为属性。

    刚才我们移动了repository目录,所以我们需要配置setting.xml。

    打开.m2目录下的setting.xml,找到 localRepository,然后改成如下:

<!-- localRepository   | The path to the local repository maven will use to store artifacts.   |   | Default: ~/.m2/repository   -->  <localRepository>D:\Maven\repository\</localRepository> <!--repository移动后的路径-->

 

  6、配置代理

    如果所在的办公环境是通过代理服务器连接外网,则需要给Maven配置代理,否则连不了Maven的中央仓库。

    打开.m2目录下的setting.xml,找到proxies,在<proxies></proxies>节点里面可以进行代理的配置。 

复制代码
<proxies>    <!-- proxy     | Specification for one proxy, to be used in connecting to the network.     |    <proxy>      <id>optional</id>      <active>true</active>      <protocol>http</protocol>      <username>proxyuser</username>      <password>proxypass</password>      <host>proxy.host.net</host>      <port>80</port>      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>    </proxy>    -->    <proxy>      <id>maven-proxy</id>                <!--代理的唯一标识-->      <active>true</active>                <!--是否激活代理-->      <protocol>http</protocol>            <!--代理使用的协议-->      <username>proxyuser</username>    <!--用户名-->      <password>proxypass</password>    <!--密码-->      <host>proxy.host.net</host>        <!--代理服务器-->      <port>80</port>                    <!--端口-->      <nonProxyHosts>local.net|some.host.com</nonProxyHosts> <!--不需要代理的域名-->    </proxy>  </proxies>
复制代码

 

 

(二)常用命令和标准的Maven项目结构

1、常用命令

    1)创建一个Project

 

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

 

  mvn archetype:generate  固定格式

  -DgroupId         组织标识(包名)

  -DartifactId        项目名称

  -DarchetypeArtifactId    指定ArchetypeId,maven-archetype-quickstart,创建一个Java Project;maven-archetype-webapp,创建一个Web Project

  -DinteractiveMode      是否使用交互模式

    2)编译源代码

mvn compile

    3)编译测试代码

mvn test-compile

    4)清空

mvn clean

    5)运行测试

mvn test

    6)生产站点目录并打包

mvn site-deploy

    7)安装当前工程的输出文件到本地仓库

mvn install

    8)打包

mvn package

    9)先清除再打包

mvn clean package

    10)打成jar包

mvn jar:jar

    11)生成eclipse项目  

mvn eclipse:eclipse

    12)查看帮助信息

mvn help:help

   13)查看maven有哪些项目类型分类

mvn archetype:generate -DarchetypeCatalog=intrenal

 

 

  2、标准的Maven项目结构                                         

                    

    src/main/java  存放项目的源代码

    src/test/java  存放测试源代码

    如果要存放一些配置文件,可以再建立一个目录src/main/resource存放,如存放log4j.properties等

 

 

  

 (三)构建一个Jave Project

 

 使用Maven构建一个简单的Java项目

  1、进入命令行,执行下面的语句。

mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  执行完成后,可以看到如下结果:

  BUILD SUCCESS,当在前用户目录下(即C:\Documents and Settings\Administrator)下构建了一个Java Project叫做my-app。

  2、进入my-app目录,可以看到有一个pom.xml文件,这个文件是Maven的核心。

    1)pom意思就是project object model。

    2)pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。

    3)pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml

    4)刚构建的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>cn.luxh.app</groupId>  <artifactId>my-app</artifactId>  <packaging>jar</packaging>  <version>1.0-SNAPSHOT</version>  <name>my-app</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>  </dependencies></project>
复制代码

     节点元素说明:    

复制代码
       <project>      pom文件的顶级节点    <modelVersion>   object model版本,对Maven2和Maven3来说,只能是4.0.0     <groupId>      项目创建组织的标识符,一般是域名的倒写    <artifactId>    定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目    <packaging>      打包的方式,有jar、war、ear等    <version>       当前项目的版本,SNAPSHOT,表示是快照版本,在开发中    <name>        项目的名称    <url>        项目的地址    <dependencies>   构建项目依赖的jar    <description>    项目的描述
复制代码

     其中由groupId、artifactId和version唯一的确定了一个项目坐标

  3、构建的my-app项目结构如下

                    

    1)编译源程序,进入命令行,切换到my-app目录,执行命令:mvn clean compile

 

 

    编译成功,在my-app目录下多出一个target目录,target\classes里面存放的就是编译后的class文件。

    2)测试,进入命令行,切换到my-app目录,执行命令:mvc clean test

 

 

    测试成功,在my-app\target目录下会有一个test-classes目录,存放的就是测试代码的class文件。

    3)打包,进入命令行,切换到my-app目录,执行命令:mvc clean package,执行打包命令前,会先执行编译和测试命令

 

    构建成功后,会再target目录下生成my-app-1.0-SNAPSHOT.jar包。

    4)安装,进入命令行,切换到my-app目录,执行命令:mvc clean install ,执行安装命令前,会先执行编译、测试、打包命令

 

 

   构建成功,就会将项目的jar包安装到本地仓库。

    5)运行jar包,进入命令行,切换到my-app目录,执行命令:java -cp target\my-app-1.0-SNAPSHOT.jar cn.luxh.app.App

 

 

 (四)构建一个Web Project

 

1、进入命令行,执行:

mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false

  出现一些版本号确认等直接回车就行,构建成功出现下面的提示。

  在当前用户目录下,生成的web项目目录结构如下:

                        

  2、当然这个空的项目,只有一个index.jsp页面,打包发布运行。

    1)在命令行切换到my-web-app目录,执行:mvn package,构建成功后,my-web-app目录下多了一个target目录,在这个目录下会打包成my-web-app.war,把这个war包拷贝到Tomcat的发布目录下就可以运行了。 

    2)集成Jetty发布运行,需要配置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>cn.luxh.app</groupId>  <artifactId>my-web-app</artifactId>  <packaging>war</packaging><!--web项目默认打包方式 war-->  <version>1.0-SNAPSHOT</version>  <name>my-web-app 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>  </dependencies>  <build>    <finalName>my-web-app</finalName>        <pluginManagement>    <!--配置Jetty-->      <plugins>        <plugin>         <groupId>org.mortbay.jetty</groupId>            <artifactId>maven-jetty-plugin</artifactId>        </plugin>      </plugins></pluginManagement>      </build>  </project>
复制代码

    然后执行:mvn jetty:run 就可以在8080端口上访问应用了。

 (五)Eclipse和Maven集成

 

 这里用的Eclipse版本是4.2 JUNO,打开Eclipse,菜单:Help--->Install New Software...打开安装软件窗口,在Work with...输入框点击Add...在弹出的窗口name处输入:m2eclipse ,Location处输入:http://m2eclipse.sonatype.org/sites/m2e 。

  然后一步一步往下操作就ok了,安装完成,会提示重启Eclipse,重启即可。(如果是通过代理访问外网,需要先设置Eclipse的代理)

  重启Eclipse后,指定Maven为自己安装的Maven。

 

                              

  1、创建一个Java项目

    1)File--->New--->Other--->Maven--->Maven Projet

    2)选择maven-archetype-quickstart

            

    3)输入项目的信息

 

            

    4)生成的Java项目包结构如下

 

                   

     5)修改pom.xml,指定编译时的JDK版本

 

复制代码
<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>cn.luxh.app</groupId>  <artifactId>my-app</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>my-app</name>  <url>http://maven.apache.org</url>  <!-- 指定属性 -->  <properties>      <junit.version>4.10</junit.version>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <jdk.version>1.6</jdk.version>  </properties>  <build>      <plugins>          <!-- 指定JDK的编译版本 -->          <plugin>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-compiler-plugin</artifactId>              <version>2.5.1</version>              <configuration>                  <source>${jdk.version}</source>                  <target>${jdk.version}</target>                  <showWarnings>true</showWarnings>              </configuration>          </plugin>      </plugins>  </build>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>${junit.version}</version>      <scope>test</scope>    </dependency>  </dependencies></project>
复制代码

 

 

  2、创建一个Web项目

    1)File--->New--->Other--->Maven--->Maven Projet

    2)选择maven-archetype-webapp

            

 

    3)填写项目信息 

 

            

    4)生产的Web项目包结构

 

              

 

 

       4.1)把项目转为 Dynamic Web Module,在项目上点击右键,选择属性,然后选择Project facets,然后点击Convert to faceted form...

          勾选Dynamic Web Module,选择3.0,表示支持servlet3.0

          勾选Java,选择1.6或更高的jdk版本

      4.2)工具只生成了一个叫 src/main/resource的source folder,我们需要手工添加 src/main/java、src/test/java和src/test/resource 三个source folder,在项目上右键 New ---->Source Folder,输入folder name即可。

 

                                          

      4.3)修改Source Folder的编译路径,进入Java Build Bath窗口,双击每个文件夹下的Output folder,指定路径。

        src/main/java和src/main/resource指定target/calsses,src/test/java和src/test/resource指定target/test-classes

        都选上选上Allow output folders for source folders.

                                   

      4.4)配置部署的程序Deployment Assembly,删掉test的那两项,test的程序发布的时候不需要,添加maven的依赖库,发布的时候可以发布到lib目录中,添加/src/main/webapp为部署的根目录

                                   

    5)配置tomcat7,发布运行项目

 

 (六)使用Eclipse开发一个Servlet3.0的简单例子

 

1、打开Eclipse4.2,新建一个Maven项目

    1)选择maven的archetype为maven-archetype-webapp

    2)填写项目信息

 

  2、完善项目目录结构

    1)手工添加 src/main/java、src/test/java和src/test/resource 三个source folder,在项目上右键 New ---->Source Folder,输入folder name即可。

    2)修改Source Folder的编译路径,进入Java Build Bath窗口,双击每个文件夹下的Output folder,指定路径。

     src/main/java和src/main/resource指定target/calsses,

     src/test/java和src/test/resource指定target/test-classes

     都选上选上Allow output folders for source folders.

 

  3、把项目转为 Dynamic Web Module

    1)在项目上点击右键,选择属性,然后选择Project facets,然后点击Convert to faceted form...

 

     勾选Dynamic Web Module,选择3.0,表示支持servlet3.0

 

     勾选Java,选择1.6或更高的jdk版本

    然后再点击Further configuration available...,在弹出的窗口中Context directory输入:src/main/webapp

    2)配置部署的程序Deployment Assembly,删掉test的那两项,test的程序发布的时候不需要,添加maven的依赖库,Eclipse发布的时候可以发布到lib目录中

    3)删除jdk5,添加jdk6

  

  4、pom.xml文件配置,添加Servlet3依赖、日志配置等

复制代码
<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>cn.luxh.app</groupId>  <artifactId>app</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>app Maven Webapp</name>  <url>http://maven.apache.org</url>  <!-- 属性配置 -->  <properties>      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <junit.version>4.10</junit.version>      <logback.version>1.0.7</logback.version>      <slf4j.version>1.7.2</slf4j.version>  </properties>    <!-- 依赖配置 -->  <dependencies>       <dependency>         <groupId>junit</groupId>         <artifactId>junit</artifactId>         <version>${junit.version}</version>         <scope>test</scope>    </dependency>    <dependency>        <groupId>javax.servlet</groupId>        <artifactId>javax.servlet-api</artifactId>        <version>3.1-b02</version>        <type>jar</type>        <scope>provided</scope>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>${slf4j.version}</version>    </dependency>    <dependency>        <groupId>ch.qos.logback</groupId>        <artifactId>logback-core</artifactId>        <version>${logback.version}</version>    </dependency>    <dependency>        <groupId>ch.qos.logback</groupId>        <artifactId>logback-classic</artifactId>        <version>${logback.version}</version>    </dependency>  </dependencies>  <build>    <finalName>demo</finalName>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <version>2.5.1</version>            <configuration>                <source>1.6</source>                    <target>1.6</target>              </configuration>        </plugin>    </plugins>  </build></project>
复制代码

 

  5、logback.xml日志文件配置,该文件存放在src/main/resources/目录下

复制代码
<?xml version="1.0" encoding="UTF-8"?><configuration>   <!-- 控制台输出 -->  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">      <encoder>          <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>      </encoder>  </appender>  <root level="INFO">      <appender-ref ref="stdout"/>  </root></configuration> 
复制代码

  

  6、编写Servlet

    1)写个编码过滤器

复制代码
package cn.luxh.app.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Servlet Filter implementation class EncodingFilter */@WebFilter("/EncodingFilter")public class EncodingFilter implements Filter {        final static Logger LOG = LoggerFactory.getLogger(EncodingFilter.class);    public void destroy() {        LOG.info("销毁......");    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        request.setCharacterEncoding("UTF-8");        response.setCharacterEncoding("UTF-8");        chain.doFilter(request, response);    }    public void init(FilterConfig fConfig) throws ServletException {        LOG.info("初始化......");    }}
复制代码

    2)第一个Servlet

复制代码
package cn.luxh.app.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Servlet implementation class FirstServlet */@WebServlet("/FirstServlet")public class FirstServlet extends HttpServlet {        final static Logger LOG = LoggerFactory.getLogger(FirstServlet.class);        private static final long serialVersionUID = 6833688147345340845L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        LOG.info("hello");        PrintWriter out = response.getWriter();        out.print("first servlet");        out.flush();        out.close();            }}
复制代码

 

    3)web.xml不需要任何配置,用tomcat7发布,tomcat6不支持Servlet3。访问:http://localhost:8080/app/FirstServlet

 

  

 

 

 

 


原创粉丝点击