您的位置:首页 > 其它

Maven详解

2013-05-23 10:22 155 查看
(一)环境搭建

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

 

  

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven 入门