• Maven笔记


    Maven教程

    简介

    Maven是什么?

    Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。

    在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

    Maven提供了开发人员的方式来管理:

    • Builds
    • Documentation
    • Reporting
    • Dependencies
    • SCMs
    • Releases
    • Distribution
    • mailing list

    概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。

    Maven主要目标是提供给开发人员:

    • 项目是可重复使用,易维护,更容易理解的一个综合模型。
    • 插件或交互的工具,这种声明性的模式。

    Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。

    Maven安装和配置

    想要安装 Apache Maven Windows 系统上, 需要下载 Maven zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量。

    所需工具

    1. JDK 1.8
    1. Maven 3.3.3
    2. Windows 7


    Maven 3.2
    要求 JDK 1.6 或以上版本, Maven 3.0/3.1 需要 JDK 1.5 或以上

    1. JDK 和 JAVA_HOME

    确保已安装JDK,并 "JAVA_HOME" 变量已加入到 Windows 环境变量。

    操作要以按上面数字顺序,在这个教程中,安装的 JDK  JDK1.8,为了方便学习,建议你也安装使用 JDK1.8

    2. 下载Apache Maven

    访问 Maven官方网站,打开后找到下载链接,如下:

    下载 Maven zip 文件,例如: apache-maven-3.3.3-bin.zip,将它解压到你要安装 Maven 的文件夹。

    假设你解压缩到文件夹 –  D:softwareyiibai.comapache-maven

    注意:在这一步,只是文件夹和文件,安装不是必需的。

     

    3. 添加 M2_HOME 和 MAVEN_HOME

    添加 M2_HOME  MAVEN_HOME 环境变量到 Windows 环境变量,并将其指向你的 Maven 文件夹。

    M2_HOME MAVEN_HOME
    Maven
    说只是添加 M2_HOME , 但一些项目仍引用 Maven 的文件夹 MAVEN_HOME, 因此,为了安全也把它添加进去。

    4. 添加到环境变量 - PATH

    更新 PATH 变量,添加 Maven bin 文件夹到 PATH 的最后,如: %M2_HOME%in, 这样就可以在命令中的任何目录下运行 Maven 命令了。

    5. 验证

    完成,以验证它,执行 mvn –version 在命令提示符下,如下图输出结果:

    C:UsersAdministrator>mvn -version

    Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:3

    7+08:00)

    Maven home: D:softwareyiibai.comapache-maven

    Java version: 1.8.0_40, vendor: Oracle Corporation

    Java home: D:Program FilesJavajdk1.8.0_40

    Default locale: zh_CN, platform encoding: GBK

    OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

    如果你看到类似消息,说明 Apache Maven Windows 上已安装成功。

    Maven资源库

    Maven本地资源库

    Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。很简单,当你建立一个Maven项目,所有相关文件将被存储在你的Maven本地仓库。

    默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:

    1. Unix/Mac OS X – ~/.m2
    1. Windows – C:Documents and Settings{your-username}.m2

    1. 更新Maven的本地库

    通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo

    找到 {M2_HOME}confsetting.xml, 更新 localRepository 到其它名称。

    {M2_HOME}confsetting.xml

    <settings><!-- localRepository
    
       | The path to the local repository maven will use to store artifacts.
    
       |
    
       | Default: ~/.m2/repository
    
      <localRepository>/path/to/local/repo</localRepository>
    
      --><localRepository>D:softwareyiibai.comapache-maven
    epository</localRepository>

    2. 保存文件

    执行之后,新的 Maven 本地存储库现在改为 D:softwareyiibai.comapache-maven epository.

    执行命令:

    C:worksp> mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerator -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

    详见如下图:

     

    Maven中央存储库

    当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载。首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载。

    Maven 的中央资源库网站是这样的:

     

    Maven中心储存库网站已经改版本,目录浏览可能不再使用。这将直接被重定向到 http://search.maven.org/。这就好多了,现在有一个搜索功能:

     

    PS:目录浏览功能被禁用,但是,当你建立 Maven 的项目,它仍然会从 "http://repo1.maven.org/maven/" 得到依赖, 您可以从 Maven 验证输出。

     

    Maven远程存储库

    Maven中,当你声明的库不存在于本地存储库中,也没有不存在于Maven中心储存库,该过程将停止并将错误消息输出到 Maven 控制台。

    1. 示例

     org.jvnet.localizer 只适用于 Java.net资源库

    pom.xml

     

    <dependency>

    <groupId>org.jvnet.localizer</groupId>

    <artifactId>localizer</artifactId>

    <version>1.8</version>

    </dependency>

     

    当你建立这个 Maven 项目,它将依赖找不到失败并输出错误消息。

    2. 声明Java.net储存库

    告诉 Maven 来获得 Java.net 的依赖,你需要声明远程仓库在 pom.xml 文件这样:

    pom.xml

     

    <repositories>

        <repository>

         <id>java.net</id>

         <url>https://maven.java.net/content/repositories/public/</url>

        </repository>

    </repositories>

     

    现在,Maven的依赖库查询顺序更改为:

    1. Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
    1. Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
    2. java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。

    Maven添加远程仓库

     

    默认情况下,MavenMaven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在Java.netJBoss的储存库远程仓库中能找到。

     Java.net资源库

    添加Java.net远程仓库的详细信息在"pom.xml"文件。

    pom.xml

    <project ...>

    <repositories>

    <repository>

    <id>java.net</id>

    <url>https://maven.java.net/content/repositories/public/</url>

    </repository>

    </repositories>

    </project>

     


    旧的 "http://download.java.net/maven/2" 仍然可用, 但建议升级到最新储存库。

    2. JBoss Maven存储库

    1. 添加JBoss远程仓库的详细信息在 "pom.xml" 文件中。

    pom.xml

    <project ...>

    <repositories>

    <repository>

        <id>JBoss repository</id>

        <url>http://repository.jboss.org/nexus/content/groups/public/</url>

    </repository>

    </repositories>

    </project>

     

    注意:旧的 http://repository.jboss.com/maven2/ 已过时,不再使用。

     

    Maven依赖机制

    Maven 依赖机制的帮助下自动下载所有必需的依赖库,并保持版本升级。

    案例分析

    让我们看一个案例研究,以了解它是如何工作的。假设你想使用 Log4j 作为项目的日志。这里你要做什么?

    1.在传统方式

    • 下载 Log4 j jar
    • 复制 jar 到项目类路径
    • 手动将其包含到项目的依赖
    • 所有的管理需要一切由自己做

    如果有 Log4j 版本升级,则需要重复上述步骤一次。

    2. 在Maven的方式

    • 你需要知道 log4j Maven 坐标,例如:

      <groupId>log4j</groupId>

      <artifactId>log4j</artifactId>

      <version>1.2.14</version>

      它会自动下载 log4j 1.2.14 版本库。如果"version"标签被忽略,它会自动升级库时当有新的版本时。

    • 声明 Maven 的坐标转换成 pom.xml 文件。

      <dependencies>

      <dependency>

          <groupId>log4j</groupId>

          <artifactId>log4j</artifactId>

          <version>1.2.14</version>

      </dependency>

      </dependencies>

    • Maven 编译或构建,log4j jar 会自动下载,并把它放到 Maven 本地存储库
    • 所有由 Maven 管理

    解释说明

    看看有什么不同?那么到底在Maven发生了什么?当建立一个Maven的项目,pom.xml文件将被解析,如果看到 log4j Maven 坐标,然后 Maven 按此顺序搜索 log4j 库:

    • Maven 的本地仓库搜索 log4j 
    • Maven 中央存储库搜索 log4j
    • Maven 远程仓库搜索 log4j(如果在 pom.xml 中定义)

    Maven 依赖库管理是一个非常好的工具,为您节省了大量的工作。

    如何找到 Maven 坐标?
    访问 Maven 中心储存库,搜索下载您想要的jar

     

    定制库到Maven本地资源库

    这里有2个案例,需要手动发出Maven命令包括一个 jar Maven 的本地资源库。

    1. 要使用的 jar 不存在于 Maven 的中心储存库中。
    1. 您创建了一个自定义的 jar ,而另一个 Maven 项目需要使用。

    PS,还是有很多 jar 不支持 Maven 的。

    案例学习

    例如,kaptcha,它是一个流行的第三方Java库,它被用来生成 "验证码" 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中。

    在本教程中,我们将告诉你如何安装 "kaptcha" jar Maven 的本地资源库。

    1. mvn 安装

    下载 "kaptcha",将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C盘。发出下面的命令:

    mvn install:install-file -Dfile=c:kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

    示例:

    D:>mvn install:install-file -Dfile=c:kaptcha-2.3.jar -DgroupId=com.google.code

    -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar

    [INFO] Scanning for projects...

    [INFO] Searching repository for plugin with prefix: 'install'.

    [INFO] ------------------------------------------------------------------------

    [INFO] Building Maven Default Project

    [INFO] task-segment: [install:install-file] (aggregator-style)

    [INFO] ------------------------------------------------------------------------

    [INFO] [install:install-file]

    [INFO] Installing c:kaptcha-2.3.jar to

    D:maven_repocomgooglecodekaptcha2.3kaptcha-2.3.jar

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: < 1 second

    [INFO] Finished at: Tue May 12 13:41:42 SGT 2014

    [INFO] Final Memory: 3M/6M

    [INFO] ------------------------------------------------------------------------

     

    现在,"kaptcha" jar被复制到 Maven 本地存储库。

    2. pom.xml

    安装完毕后,就在 pom.xml 中声明 kaptcha 的坐标。

    <dependency>

    <groupId>com.google.code</groupId>

    <artifactId>kaptcha</artifactId>

    <version>2.3</version>

    </dependency>

    3. 完成

    构建它,现在 "kaptcha" jar 能够从你的 Maven 本地存储库检索了。

     

     

    基于Maven项目和Eclipse IDE

    使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件。

    所需要的工具:

    1. Maven 3.3.3
    1. Eclipse 4.2
    2. JDK 8

    注意:请确保 Maven 是正确安装和配置(在Windows*nixMac OSX系统中),然后再开始本教程,避免 mvn 命令未找到错误。

    1. 从 Maven 模板创建一个项目

    在终端(* UNIXMac)或命令提示符(Windows)中,浏览到要创建 Java 项目的文件夹。键入以下命令:

    mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

    这告诉 Maven 来从 maven-archetype-quickstart 模板创建 Java 项目。如果忽视 archetypeArtifactId 选项,一个巨大的 Maven 模板列表将列出。

    例如,这里的工作目录是:C:worksp,执行命令过程时间可能比较久,看个人的网络状况。

    C:worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerat

    or -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false

    [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) > generate-sources

    @ standalone-pom >>>

    [INFO]

    [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources

    @ standalone-pom <<<

    [INFO]

    [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --

    -

    [INFO] Generating project in Batch mode

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Using following parameters for creating project from Old (1.x) Archetype:

    maven-archetype-quickstart:1.0

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Parameter: basedir, Value: C:worksp

    [INFO] Parameter: package, Value: com.yiibai

    [INFO] Parameter: groupId, Value: com.yiibai

    [INFO] Parameter: artifactId, Value: NumberGenerator

    [INFO] Parameter: packageName, Value: com.yiibai

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] project created from Old (1.x) Archetype in dir: C:workspNumberGenerato

    r

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 23.166 s

    [INFO] Finished at: 2015-10-27T11:03:48+08:00

    [INFO] Final Memory: 17M/114M

    [INFO] ------------------------------------------------------------------------

    在上述情况下,一个新的Java项目命名 "NumberGenerator", 而整个项目的目录结构会自动创建。

    注意
    有少数用户说 mvn archetype:generate 命令未能生成项目结构。如果您有任何类似的问题,不用担心,只需跳过此步骤,手动创建文件夹,请参阅步骤2的项目结构。

    2.Maven目录布局

    使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下项目的目录结构被创建。

    NumberGenerator

    |-src

    |---main

    |-----java

    |-------com

    |---------yiibai

    |-----------App.java

    |---test|-----java

    |-------com

    |---------yiibai

    |-----------AppTest.java

    |-pom.xml

    很简单的,所有的源代码放在文件夹 /src/main/java/, 所有的单元测试代码放入 /src/test/java/.

    注意,请阅读 Maven标准目录布局

    附加的一个标准的 pom.xml 被生成。这个POM文件类似于 Ant build.xml 文件,它描述了整个项目的信息,一切从目录结构,项目的插件,项目依赖,如何构建这个项目等,请阅读POM官方指南 

    pom.xml

    3. Eclipse IDE

    为了使它成为一个 Eclipse 项目,在终端进入到 "NumberGenerator" 项目,键入以下命令:

    C:workspNumberGenerator>mvn eclipse:eclipse

    .... ...

    [INFO] Using Eclipse Workspace: null

    [INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAIN

    ER

    [INFO] Not writing settings - defaults suffice

    [INFO] Wrote Eclipse project for "NumberGenerator" to C:workspNumberGenerator.

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 04:47 min

    [INFO] Finished at: 2015-10-27T15:24:48+08:00

    [INFO] Final Memory: 15M/164M

    [INFO] ------------------------------------------------------------------------

    执行以上命令后,它自动下载更新相关资源和配置信息(需要等待一段时间),并产生 Eclipse IDE所要求的所有项目文件。要导入项目到Eclipse IDE中,选择 "File -> Import… -> General->Existing Projects into Workspace"

    图片: 项目导入到 Eclipse IDE中。

    4. 更新POM

    默认的 pom.xml 太简单了,很多时候,你需要添加编译器插件来告诉 Maven 使用哪个 JDK 版本是用来编译项目。(默认JDK1.4,这的确太旧了点)

    <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-compiler-plugin</artifactId>

            <version>2.3.2</version>

            <configuration>

                <source>1.6</source>

                <target>1.6</target>

            </configuration>

        </plugin>

    从更新JUnit 3.8.1到最新的 4.11

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.11</version>

        <scope>test</scope>

    </dependency>

    Maven 坐标

    上面的XML代码片段被称为"Maven坐标",如果你需要 JUnit jar,你需要找出其相应的 Maven 坐标。它适用于所有其他的依赖,如SpringHibernateApache 普通的等,只要到Maven中心储存库,并找出哪些是依赖正确的 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.mkyong</groupId>

        <artifactId>NumberGenerator</artifactId>

        <packaging>jar</packaging>

        <version>1.0-SNAPSHOT</version>

        <name>NumberGenerator</name>

        <url>http://maven.apache.org</url>

        <dependencies>

            <dependency>

                <groupId>junit</groupId>

                <artifactId>junit</artifactId>

                <version>4.11</version>

                <scope>test</scope>

            </dependency>

        </dependencies>

     

        <build>

         <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>2.3.2</version>

                <configuration>

                    <source>1.6</source>

                    <target>1.6</target>

                </configuration>

            </plugin>

         </plugins>

        </build>

     

    </project>

    在终端,再次发出同样的命令 mvn eclipse:eclipse ,Maven将从Maven中心储存库下载插件项目依赖关系(JUnit),它会自动保存到你的本地仓库。

    5. 更新业务逻辑

    测试驱动开发(TDD),先更新单元测试,以确保应用程序(APP)对象有一个方法来生成包含恰好36位字母表的唯一密钥。

    AppTest.java

    package com.yiibai;

     

    import org.junit.Assert;

    import org.junit.Test;

     

    public class AppTest {

     

        @Test

        public void testLengthOfTheUniqueKey() {

     

            App obj = new App();

            Assert.assertEquals(36, obj.generateUniqueKey().length());

     

        }

    }

    完成业务逻辑。

    App.java

    package com.yiibai;

     

    import java.util.UUID;

     

    /**

    * Generate a unique number

    *

    */

    public class App

    {

     

    public static void main( String[] args )

    {

    App obj = new App();

    System.out.println("Unique ID : " + obj.generateUniqueKey());

    }

     

    public String generateUniqueKey(){

          

        String id = UUID.randomUUID().toString();

        return id;

          

    }

    }

    6. Maven 打包

    现在,我们将使用Maven这个项目,并输出编译成一个 "jar" 的文件。请参考 pom.xml 文件,包元素定义应该包应该输出什么。

    pom.xml

    <project ...>

        <modelVersion>4.0.0</modelVersion>

        <groupId>com.yiibai</groupId>

        <artifactId>NumberGenerator</artifactId>    

        <packaging>jar</packaging>    

        <version>1.0-SNAPSHOT</version>

    在终端输入 mvn package :

    C:workspNumberGenerator> mvn package

    ... ...

    ha-2/classworlds-1.1-alpha-2.jar (37 KB at 20.2 KB/sec)

    Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2 .0.2/plexus-io-2.0.2.jar (57 KB at 28.1 KB/sec)

    Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-inte rpolation/1.15/plexus-interpolation-1.15.jar (60 KB at 21.4 KB/sec)

    Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-arch iver/2.1/plexus-archiver-2.1.jar (181 KB at 61.5 KB/sec)

    Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-util s/3.0/plexus-utils-3.0.jar (221 KB at 60.3 KB/sec)

    [INFO] Building jar: C:workspNumberGenerator argetNumberGenerator-1.0-SNAPSH

    OT.jar

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 01:00 min

    [INFO] Finished at: 2015-10-27T20:00:17+08:00

    [INFO] Final Memory: 10M/54M

    [INFO] ------------------------------------------------------------------------

    它编译,运行单元测试并打包项目成一个 jar 文件,并把它放在 project/target 文件夹。如果出错:ERROR: Unable to locate the Javac Compiler in:,  C:Program Files (x86)Javajre6..lib ools.jar,Please ensure you are using JDK 1.4 or above and,not a JRE (the com.sun.tools.javac.Main class is required)...

    参考:http://my.oschina.net/u/1449336/blog/199802

     最终项目的目录结构如下图片 :

    7. 示例

    从项目的 jar 文件运行应用程序示例

    C:workspNumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.y

    iibai.App

    Unique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369

    C:workspNumberGenerator>

    C:workspNumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.y

    iibai.App

    Unique ID : 48df568a-4b4b-4964-b767-664e206ca4b5

    C:workspNumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.y

    iibai.App

    Unique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6

    下载代码

    下载代码Maven-NumberGenerator.zip 

     

     

    转换基于Maven的Java项目支持Eclipse IDE

    在过去的教程中,使用 Maven 创建了一个Java项目,但是这个项目不能导入到Eclipse IDE中,因为它不是 Eclipse 风格的项目。

    这里有一个指南,向您演示如何转换 Maven 生成 Java 项目为 Eclipse 支持格式的项目。

    1. mvn eclipse:eclipse

    这真的很容易做到这一点。浏览到 Java 项目文件夹,其中 pom.xml 文件被重写。并发出以下命令:

    C:worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=Yiibaicor

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Using following parameters for creating project from Old (1.x) Archetype:

    maven-archetype-quickstart:1.1

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Parameter: basedir, Value: C:worksp

    [INFO] Parameter: package, Value: com.yiibai

    [INFO] Parameter: groupId, Value: com.yiibai

    [INFO] Parameter: artifactId, Value: Yiibaicor

    [INFO] Parameter: packageName, Value: com.yiibai

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] project created from Old (1.x) Archetype in dir: C:workspYiibaicor

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 03:37 min

    [INFO] Finished at: 2015-10-27T20:37:00+08:00

    [INFO] Final Memory: 16M/185M

    [INFO] ------------------------------------------------------------------------

    看一个完整的例子:

    C:worksp>cd Yiibaicor

     

    C:workspYiibaicor>mvn eclipse:eclipse

    [INFO] Scanning for projects...

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] Building Yiibaicor 1.0-SNAPSHOT

    [INFO] ------------------------------------------------------------------------

    [INFO]

    [INFO] >>> maven-eclipse-plugin:2.10:eclipse (default-cli) > generate-resources

    @ Yiibaicor >>>

    [INFO]

    [INFO] <<< maven-eclipse-plugin:2.10:eclipse (default-cli) < generate-resources

    @ Yiibaicor <<<

    [INFO]

    [INFO] --- maven-eclipse-plugin:2.10:eclipse (default-cli) @ Yiibaicor ---

    [INFO] Using Eclipse Workspace: null

    [INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAI

    ER

    [INFO] Not writing settings - defaults suffice

    [INFO] Wrote Eclipse project for "Yiibaicor" to C:workspYiibaicor.

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 1.737 s

    [INFO] Finished at: 2015-10-27T20:39:15+08:00

    [INFO] Final Memory: 13M/114M

    [INFO] ------------------------------------------------------------------------

    注意,如果你第一次运行这个命令,它可能需要一些时间来下载所有必需的依赖到你的项目,才能转换为 Eclipse 风格的项目。

    2. 验证Java项目

    在此之后,你会发现创建了两个新文件 - ".classpath"".project"。这两个文件都为 Eclipse IDE 所创建。

    File : .classpath

    <?xml version="1.0" encoding="UTF-8"?>

    <classpath>

    <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>

    <classpathentry kind="src" path="src/main/java" including="**/*.java"/>

    <classpathentry kind="output" path="target/classes"/>

    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

    <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>

    </classpath>

    注意
    有没有注意到,一个"M2_REPO" classpath变量已经生成?对于第一次,要将这个 M2_REPO classpath 变量添加到您的Eclipse IDE中。 否则,Eclipse会在你的导入项目之后引发错误。

    File : .project

    <?xml version="1.0" encoding="UTF-8"?>

    <projectDescription>

    <name>Yiibaicor</name>

    <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>

    <projects/>

    <buildSpec>

    <buildCommand>

    <name>org.eclipse.jdt.core.javabuilder</name>

    </buildCommand>

    </buildSpec>

    <natures>

    <nature>org.eclipse.jdt.core.javanature</nature>

    </natures>

    </projectDescription>

    3. 导入到Eclipse IDE

    现在,将它导入到 Eclipse IDE中,请按以下步骤操作:

    Eclipse IDE,菜单栏 , File -> Import… -> General -> Existing Projects into Workspace -> 选择根目录(选择项目文件夹中) - >完成。

    你的Maven生成的Java项目导入到Eclipse IDE中,你可以现在就开始你的开发。

    使用Maven创建Web应用程序项目

    在本教程中,我们将演示如何使用 Maven 创建一个 Java Web 项目(Spring MVC)

    用到的技术/工具:

    1. Maven 3.3.3
    1. Eclipse 4.3
    2. JDK 8
    3. Spring 4.1.1.RELEASED
    4. Tomcat 7
    5. Logback 1.0.13

    1. 从Maven模板创建Web项目

    您可以通过使用Mavenmaven-archetype-webapp模板来创建一个快速启动Java Web应用程序的项目。在终端(* UNIXMac)或命令提示符(Windows)中,导航至您想要创建项目的文件夹。

    键入以下命令:

    $ mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    具体示例

    C:worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebAp

    p -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    [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) > generate-sources

    @ standalone-pom >>>

    [INFO]

    [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources

    @ standalone-pom <<<

    [INFO]

    [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --

    -

    [INFO] Generating project in Batch mode

    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/ma

    ven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar

    Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav

    en-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar (4 KB at 0.1 KB/sec)

    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/ma

    ven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom

    Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/mav

    en-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom (533 B at 0.1 KB/sec)

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Using following parameters for creating project from Old (1.x) Archetype:

    maven-archetype-webapp:1.0

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Parameter: basedir, Value: C:worksp

    [INFO] Parameter: package, Value: com.yiibai

    [INFO] Parameter: groupId, Value: com.yiibai

    [INFO] Parameter: artifactId, Value: CounterWebApp

    [INFO] Parameter: packageName, Value: com.yiibai

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] project created from Old (1.x) Archetype in dir: C:workspCounterWebApp

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 10:30 min

    [INFO] Finished at: 2015-10-28T20:31:03+08:00

    [INFO] Final Memory: 16M/174M

    [INFO] ------------------------------------------------------------------------

    新的Web项目命名为 "CounterWebApp",以及一些标准的 web 目录结构也会自动创建。

    2. 项目目录布局

    查看生成的项目结构布局:

    .|____CounterWebApp

    ||____pom.xml

    ||____src

    |||____main

    ||||____resources

    ||||____webapp

    |||||____index.jsp

    |||||____WEB-INF

    ||||||____web.xml

     

    Maven 产生了一些文件夹,一个部署描述符 web.xmlpom.xml index.jsp

    注意,
    请查看官方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.yiibai</groupId>

    <artifactId>CounterWebApp</artifactId>

    <packaging>war</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>CounterWebApp 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>CounterWebApp</finalName>

    </build>

    </project>

    web.xml – Servlet 2.3 已经比较旧, 建议升级到2.5

    <!DOCTYPE web-app PUBLIC

    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name></web-app>

    index.jsp – 一个简单的 hello world html 页面文件

    <html>

    <body>

    <div><div class="ads-in-post hide_if_width_less_800">

    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

    <!-- 728x90 - After2ndH4 -->

    <ins class="adsbygoogle hide_if_width_less_800"

    style="display:inline-block;728px;height:90px"

    data-ad-client="ca-pub-2836379775501347"

    data-ad-slot="3642936086"

         data-ad-region="mkyongregion"></ins>

    <script>

    (adsbygoogle = window.adsbygoogle || []).push({});

    </script>

    </div></div><h2>Hello World!</h2>

    </body>

    </html>

    3. Eclipse IDE 支持

    要导入这个项目到Eclipse中,需要生成一些 Eclipse 项目的配置文件:

    3.1、在终端,进入到 "CounterWebApp" 文件夹中,键入以下命令:

    C:worksp>cd CounterWebApp

    C:workspCounterWebApp>mvn eclipse:eclipse -Dwtpversion=2.0

    [INFO] Scanning for projects...

    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven -war-plugin/2.2/maven-war-plugin-2.2.pom

    Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- war-plugin/2.2/maven-war-plugin-2.2.pom (7 KB at 2.5 KB/sec)

    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven -war-plugin/2.2/maven-war-plugin-2.2.jar

    Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven- war-plugin/2.2/maven-war-plugin-2.2.jar (77 KB at 26.2 KB/sec)

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] Building CounterWebApp Maven Webapp 1.0-SNAPSHOT

    [INFO] ------------------------------------------------------------------------

    [INFO]

    [INFO] >>> maven-eclipse-plugin:2.10:eclipse (default-cli) > generate-resources

    @ CounterWebApp >>>

    [INFO]

    [INFO] <<< maven-eclipse-plugin:2.10:eclipse (default-cli) < generate-resources

    @ CounterWebApp <<<

    [INFO]

    [INFO] --- maven-eclipse-plugin:2.10:eclipse (default-cli) @ CounterWebApp ---

    [INFO] Adding support for WTP version 2.0.

    [INFO] Using Eclipse Workspace: null

    [INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER

    [INFO] Not writing settings - defaults suffice

    [INFO] Wrote Eclipse project for "CounterWebApp" to C:workspCounterWebApp.

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 7.982 s

    [INFO] Finished at: 2015-10-28T20:24:57+08:00

    [INFO] Final Memory: 15M/146M

    [INFO] ------------------------------------------------------------------------

    注意,此选项 -Dwtpversion=2.0 告诉 Maven 将项目转换到 Eclipse Web 项目(WAR),而不是默认的Java项目(JAR)。为方便起见,以后我们会告诉你如何配置 pom.xml 中的这个 WTP 选项。

    3.2 导入到 Eclipse IDE – File -> Import… -> General -> Existing Projects into workspace.

    4. 更新POM

    Maven中,Web项目的设置都通过这个单一的pom.xml文件配置。

    1. 添加项目依赖 - Spring, logback JUnit
    1. 添加插件来配置项目

    阅读注释清楚明了。

    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.yiibai</groupId>

        <artifactId>CounterWebApp</artifactId>

        <packaging>war</packaging>

        <version>1.0-SNAPSHOT</version>

        <name>CounterWebApp Maven Webapp</name>

        <url>http://maven.apache.org</url> <properties>

            <jdk.version>1.7</jdk.version>

            <spring.version>4.1.1.RELEASE</spring.version>

            <jstl.version>1.2</jstl.version>

            <junit.version>4.11</junit.version>

            <logback.version>1.0.13</logback.version>

            <jcl-over-slf4j.version>1.7.5</jcl-over-slf4j.version>

        </properties>

     

        <dependencies>

            <!-- Unit Test -->

            <dependency>

                <groupId>junit</groupId>

                <artifactId>junit</artifactId>

                <version>${junit.version}</version>

            </dependency>

     

            <!-- Spring Core -->

            <dependency>

                <groupId>org.springframework</groupId>

                <artifactId>spring-core</artifactId>

                <version>${spring.version}</version>

                <exclusions>

                    <exclusion>

                        <groupId>commons-logging</groupId>

                        <artifactId>commons-logging</artifactId>

                    </exclusion>

                </exclusions>

            </dependency>

     

            <dependency>

                <groupId>org.slf4j</groupId>

                <artifactId>jcl-over-slf4j</artifactId>

                <version>${jcl-over-slf4j.version}</version>

            </dependency>

            <dependency>

                <groupId>ch.qos.logback</groupId>

                <artifactId>logback-classic</artifactId>

                <version>${logback.version}</version>

            </dependency>

     

            <dependency>

                <groupId>org.springframework</groupId>

                <artifactId>spring-web</artifactId>

                <version>${spring.version}</version>

            </dependency>

     

            <dependency>

                <groupId>org.springframework</groupId>

                <artifactId>spring-webmvc</artifactId>

                <version>${spring.version}</version>

            </dependency>

            <!-- jstl -->

            <dependency>

                <groupId>jstl</groupId>

                <artifactId>jstl</artifactId>

                <version>${jstl.version}</version>

            </dependency>

        </dependencies>

     

        <build>

            <finalName>CounterWebApp</finalName>

     

            <plugins>

                <!-- Eclipse project -->

              <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-eclipse-plugin</artifactId>

                <version>2.9</version>

                <configuration>

                        <!-- Always download and attach dependencies source code -->

                    <downloadSources>true</downloadSources>

                    <downloadJavadocs>false</downloadJavadocs>

                    <!-- Avoid type mvn eclipse:eclipse -Dwtpversion=2.0 -->

                    <wtpversion>2.0</wtpversion>

                </configuration>

              </plugin>

     

              <!-- Set JDK Compiler Level -->

              <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>2.3.2</version>

                <configuration>

                    <source>${jdk.version}</source>

                    <target>${jdk.version}</target>

                </configuration>

              </plugin>

     

              <!-- For Maven Tomcat Plugin -->

              <plugin>

                <groupId>org.apache.tomcat.maven</groupId>

                <artifactId>tomcat7-maven-plugin</artifactId>

                <version>2.2</version>

                <configuration>

                    <path>/CounterWebApp</path>

                </configuration>

              </plugin>

            </plugins>

        </build>

    </project>

    注意,为方便起见,声明 maven-eclipse-plugin,并配置wtpversion 来避免输入参数 -Dwtpversion=2.0。现在,每次使用 mvn eclipse:eclipseMaven将这个项目导入转换为 Eclipse Web 项目。

    #之前

    mvn eclipse:eclipse --> Eclipse Java project (JAR)

    mvn eclipse:eclipse -Dwtpversion=2.0 --> Eclipse Java web project (WAR)

     

    #之后

    mvn eclipse:eclipse --> Eclipse Java web project (WAR)

    5. 更新源代码

    在这一步中,在上一步配置完pom.xml后,重新执行 mvn eclipse:eclipse 这个命令,我们将创建Spring MVC的一些文件和logback日志框架的文件夹,最终的项目结构如下所示:

    .

    |____pom.xml

    |____src

    | |____main

    | | |____java

    | | | |____com

    | | | | |____yiibai

    | | | | | |____controller

    | | | | | | |____BaseController.java

    | | |____resources

    | | | |____logback.xml

    | | |____webapp

    | | | |____WEB-INF

    | | | | |____mvc-dispatcher-servlet.xml

    | | | | |____pages

    | | | | | |____index.jsp

    | | | | |____web.xml

    注意,如果它不存在,需要手动创建文件夹。

    5.1 创建 Spring MVC 的控制器类。

    /src/main/java/com/yiibai/controller/BaseController.java

    package com.yiibai.controller;

     

    import org.slf4j.LoggerFactory;

    import org.springframework.stereotype.Controller;

    import org.springframework.ui.ModelMap;

    import org.springframework.web.bind.annotation.PathVariable;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RequestMethod;

     

    @Controller

    public class BaseController {

     

        private static int counter = 0;

        private static final String VIEW_INDEX = "index";

        private final static org.slf4j.Logger logger = LoggerFactory.getLogger(BaseController.class);

     

        @RequestMapping(value = "/", method = RequestMethod.GET)

        public String welcome(ModelMap model) {

     

            model.addAttribute("message", "Welcome");

            model.addAttribute("counter", ++counter);

            logger.debug("[welcome] counter : {}", counter);

     

            // Spring uses InternalResourceViewResolver and return back index.jsp

            return VIEW_INDEX;

     

        }

     

        @RequestMapping(value = "/{name}", method = RequestMethod.GET)

        public String welcomeName(@PathVariable String name, ModelMap model) {

     

            model.addAttribute("message", "Welcome " + name);

            model.addAttribute("counter", ++counter);

            logger.debug("[welcomeName] counter : {}", counter);

            return VIEW_INDEX;

     

        }

     

    }

    5.2 创建Spring配置文件。

    /src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml

    <beans xmlns="http://www.springframework.org/schema/beans"

        xmlns:context="http://www.springframework.org/schema/context"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="

            http://www.springframework.org/schema/beans     

            http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context 

            http://www.springframework.org/schema/context/spring-context.xsd">

     

        <context:component-scan base-package="com.yiibai.controller" />

        <bean

            class="org.springframework.web.servlet.view.InternalResourceViewResolver">

            <property name="prefix">

                <value>/WEB-INF/pages/</value>

            </property>

            <property name="suffix">

                <value>.jsp</value>

            </property>

        </bean>

     

    </beans>

    5.3 更新让现有的 web.xml 支持 Servlet 2.5(默认的Servlet2.3 太旧了) 并且还通过 Spring 监听器 ContextLoaderListener 集成了Spring框架。

    /src/main/webapp/WEB-INF/web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

        version="2.5">

     

        <display-name>Counter Web Application</display-name>

     

        <servlet>

            <servlet-name>mvc-dispatcher</servlet-name>

            <servlet-class>

                            org.springframework.web.servlet.DispatcherServlet

                    </servlet-class>

            <load-on-startup>1</load-on-startup>

        </servlet>

     

        <servlet-mapping>

            <servlet-name>mvc-dispatcher</servlet-name>

            <url-pattern>/</url-pattern>

        </servlet-mapping>

     

        <context-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>

        </context-param>

     

        <listener>

            <listener-class>

                       org.springframework.web.context.ContextLoaderListener

                    </listener-class>

        </listener>

    </web-app>

    5.4 移动文件 index.jsp  WEB-INF/pages 目录下,为了保护直接访问。并更新内容:

    /src/main/webapp/WEB-INF/pages/index.jsp

     

    5.5 在资源文件夹(resources)中创建 logback.xml 文件

    /src/main/resources/logback.xml

    <?xml version="1.0" encoding="UTF-8"?>

    . Eclipse + Tomcat

    在第5步中创建所有文件以后,这里有一些方法可以用来部署和测试Web项目,我们这里推荐使用6.2中的方法。

    6.1 要编译,测试和项目打包成一个WAR文件,输入:

    mvn package

    一个新的 WAR 文件将在 project/target/CounterWebApp.war产生,只需复制并部署到Tomcat 发布的目录。

    6.2 如果想通过 Eclipse 服务器这个项目插件(Tomcat 或其它容器)调试,这里再输入:

    mvn eclipse:eclipse

    如果一切顺利,该项目的依赖将被装配附加到 Web部署项目。图片: 右键点击 project -> Properties -> Deployment Assembly

    6.3 Maven Tomcat 插件声明(加入到 pom.xml)

    pom.xml

    <!-- For Maven Tomcat Plugin -->

    键入以下命令(有时网络不通畅需要执行2-3)

    mvn tomcat:run

    tp://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details

    20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Se

    g level of logger [com.yiibai.controller] to DEBUG

    20:37:32,089 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Se

    g additivity of logger [com.yiibai.controller] to false

    20:37:32,090 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction -

    ching appender named [STDOUT] to Logger[com.yiibai.controller]

    20:37:32,090 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction

    tting level of ROOT logger to ERROR

    20:37:32,090 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction -

    ching appender named [STDOUT] to Logger[ROOT]

    20:37:32,090 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationActi

     End of configuration.

    20:37:32,091 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3bead5  Registering current configuration as safe fallback point

     

    十月 28, 2015 20:37:32 下午 org.apache.catalina.core.ApplicationContext log

    信息: Initializing Spring root WebApplicationContext

    十月 28, 2015 20:37:33 下午 org.apache.catalina.core.ApplicationContext log

    信息: Initializing Spring FrameworkServlet 'mvc-dispatcher'

    十月 28, 2015 20:37:33 下午 org.apache.coyote.http11.Http11Protocol init

    信息: Initializing Coyote HTTP/1.1 on http-8080

    十月 28, 2015 20:37:33 下午 org.apache.coyote.http11.Http11Protocol start

    信息: Starting Coyote HTTP/1.1 on http-8080

    这将启动Tomcat,部署项目默认在端口8080

    出错:Maven项目下update mavenEclipse报错:java.lang.ClassNotFoundException: ContextLoaderL

    解决方案:

    1.右键点击项目--选择Properties

    选择Deployment Assembly,在右边点击Add按钮,在弹出的窗口中选择Java Build Path Entries

    2.点击Next,选择Maven Dependencies

    3.点击Finish然后可以看到已经把Maven Dependencies添加到Web应用结构中了

    操作完后,重新部署工程,不再报错了。然后我们再到.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps目录下,发现工程WEB-INF目录下自动生成了lib目录,并且所有的依赖jar包也都已经部署进来。问题因此解决。

    转换基于Maven的Web应用程序支持Eclipse IDE

    在上一节教程中,使用Maven创建了一个Web应用程序。这里有一个指南,告诉你如何转换Web应用程序到Eclipse IDE支持的形式。

    注意,通过WTP工具Eclipse IDE支持Web应用程序,所以需要让基于Maven的项目支持它。

    1. mvn eclipse:eclipse -Dwtpversion=2.0

    要转换一个基于MavenJava项目支持IDE,使用此命令:

    mvn eclipse:eclipse

    对于Web应用程序,需要额外的参数,使其支持 Eclipse WTP,应该使用这个命令:

    mvn eclipse:eclipse -Dwtpversion=2.0

    看看其输出

    C:worksp> mvn archetype:generate -DgroupId=com.yiibai -DartifactId=yiibaiweb-core

    C:workspyiibaiweb-core>mvn eclipse:eclipse -Dwtpversion=2.0

    [INFO] Scanning for projects...

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] Building yiibaiweb-core 1.0-SNAPSHOT

    [INFO] ------------------------------------------------------------------------

    [INFO]

    [INFO] >>> maven-eclipse-plugin:2.10:eclipse (default-cli) > generate-resources

    @ yiibaiweb-core >>>

    [INFO]

    [INFO] <<< maven-eclipse-plugin:2.10:eclipse (default-cli) < generate-resources

    @ yiibaiweb-core <<<

    [INFO]

    [INFO] --- maven-eclipse-plugin:2.10:eclipse (default-cli) @ yiibaiweb-core ---

    [INFO] Adding support for WTP version 2.0.

    [INFO] Using Eclipse Workspace: null

    [INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAIN

    ER

    [INFO] Not writing settings - defaults suffice

    [INFO] Wrote Eclipse project for "yiibaiweb-core" to C:workspyiibaiweb-core.

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 2.038 s

    [INFO] Finished at: 2015-11-02T20:30:36+08:00

    [INFO] Final Memory: 13M/114M

    [INFO] ------------------------------------------------------------------------

    2. Eclipse WTP

    标准Eclipse".classpath"".project"文件被创建。你会发现创建一个新的 ".setting" 文件夹,里面包含两个文件"org.eclipse.wst.common.component""org.eclipse.wst.common.project.facet.core.xml" 都是WTPFaces文件用来支持Eclipse

    File : org.eclipse.wst.common.project.facet.core.xml

    <faceted-project><fixed facet="jst.java"/><fixed facet="jst.web"/><installed facet="jst.web"version="2.4"/><installed facet="jst.java"version="1.4"/></faceted-project>

    注意
    使用JDK1.4 Maven2.X生成的 Web应用程序(见上文),这是相当过时,需要将其升级到最新的JDK版本。

    File : org.eclipse.wst.common.component

    <project-modules id="moduleCoreId"project-version="2.0"><wb-module deploy-name="mkyongweb-core"><property name="context-root"value="mkyongweb-core"/><wb-resource deploy-path="/"source-path="src/main/webapp"/><property name="java-output-path"value="/target/classes"/><wb-resource deploy-path="/WEB-INF/classes"source-path="src/main/resources"/></wb-module></project-modules>

    3. 导入到Eclipse IDE

    现在,我们已经拥有了一个 Eclipse Web应用程序需要配置和文件,那么,就可以开始导入基于Maven构建Web应用程序到Eclipse IDE中去了。

    步骤:
    Eclipse IDE 的菜单栏, File -> Import… -> General -> Existing Projects into Workspace -> 选择根目录(选择项目文件夹中)-> 完成。


    使用Maven模板创建项目

    在本教程中,我们将向你展示如何使用mvn archetype:generate从现有的Maven模板列表中生成项目。在Maven 3.3.3,有超过1000+个模板,Maven 团队已经过滤掉一些无用的模板。

    通常情况下,我们只需要使用下面的两个模板:

    1. maven-archetype-webapp – Java Web Project (WAR)
    1. maven-archetype-quickstart – Java Project (JAR)

    1. Maven 1000+ 模板

    如果键入命令mvn archetype:generate1000 +模板会被提示在屏幕上,你没有办法看到它,或者选择什么。为了解决这个问题,输出模板列表,像这样保存为文本文件:

    C:worksp> mvn archetype:generate > templates.txt //waiting few seconds,then exits

    Press CTRL + C

     

    C:worksp> vim templates.txt

    2. Maven archetype:generate

    步骤来指导你如何从现有 Spring-Hibernate 模板来构建Web项目:

    2.1 列出 Maven 的模板:

    C:worksp> mvn archetype:generate

    [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) > generate-sources @ standalone-pom >>>

    [INFO]

    [INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<<

    [INFO]

    [INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---

    [INFO] Generating project in Interactive mode

    [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)

     

    Choose archetype:

    1: remote -> am.ik.archetype:maven-reactjs-blank-archetype (Blank Project for React.js)

    2: remote -> am.ik.archetype:msgpack-rpc-jersey-blank-archetype (Blank Project for Spring Boot + Jersey)

    3: remote -> am.ik.archetype:mvc-1.0-blank-archetype (MVC 1.0 Blank Project)

    4: remote -> am.ik.archetype:spring-boot-blank-archetype (Blank Project for Spring Boot)

    5: remote -> am.ik.archetype:spring-boot-docker-blank-archetype (Docker Blank Project for Spring Boot)

    6: remote -> am.ik.archetype:spring-boot-gae-blank-archetype (GAE Blank Project for Spring Boot)

    7: remote -> am.ik.archetype:spring-boot-jersey-blank-archetype (Blank Project for Spring Boot + Jersey)

    8: remote -> at.chrl.archetypes:chrl-spring-sample (Archetype for Spring Vaadin Webapps)

    2.2 选择数字 "314" 来使用 ml.rugal.archetype:springmvc-spring-hibernate 模板,并填写详细信息:

    注意,这个数字314可能在您的环境有所不同。寻找正确的数字应该看看在上面的步骤1中列出的技术。

    1445: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)

    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive co

    ntains): 674: 477

    Choose ml.rugal.archetype:springmvc-spring-hibernate version:

    1: 0.1

    2: 0.2

    3: 0.3

    4: 0.4

    5: 0.5

    6: 0.6

    Choose a number: 6:

    Downloading: https://repo.maven.apache.org/maven2/ml/rugal/archetype/springmvc-s

    pring-hibernate/0.6/springmvc-spring-hibernate-0.6.jar

    Downloaded: https://repo.maven.apache.org/maven2/ml/rugal/archetype/springmvc-sp

    ring-hibernate/0.6/springmvc-spring-hibernate-0.6.jar (30 KB at 6.8 KB/sec)

    Downloading: https://repo.maven.apache.org/maven2/ml/rugal/archetype/springmvc-s

    pring-hibernate/0.6/springmvc-spring-hibernate-0.6.pom

    Downloaded: https://repo.maven.apache.org/maven2/ml/rugal/archetype/springmvc-sp

    ring-hibernate/0.6/springmvc-spring-hibernate-0.6.pom (4 KB at 5.3 KB/sec)

    Define value for property 'groupId': : com.yiibai.web

    Define value for property 'artifactId': : myweb

    Define value for property 'version': 1.0-SNAPSHOT: :

    Define value for property 'package': com.yiibai.web: :

    Confirm properties configuration:

    groupId: com.yiibai.web

    artifactId: myweb

    version: 1.0-SNAPSHOT

    package: com.yiibai.web

    Y: : y

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Using following parameters for creating project from Archetype: springmvc

    -spring-hibernate:0.6

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Parameter: groupId, Value: com.yiibai.web

    [INFO] Parameter: artifactId, Value: myweb

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] Parameter: package, Value: com.yiibai.web

    [INFO] Parameter: packageInPathFormat, Value: com/yiibai/web

    [INFO] Parameter: package, Value: com.yiibai.web

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] Parameter: groupId, Value: com.yiibai.web

    [INFO] Parameter: artifactId, Value: myweb

    [INFO] project created from Archetype in dir: C:workspmyweb

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 05:07 min

    [INFO] Finished at: 2015-11-03T07:10:56+08:00

    [INFO] Final Memory: 16M/176M

    [INFO] ------------------------------------------------------------------------

     

    它会生成以下项目文件夹和文件。

    图片: 生成Eclipse IDE中的项目结构。

    注意,要导入项目到Eclipse中,键入命令mvn eclipse:eclipse,并导入它作为一个正常的项目:

    c:worksp> cd myweb

    c:worksp>myweb> mvn eclipse:eclipse

    3. 更多示例

    如果您知道哪个 archetypeArtifactId 使用,只需跳过交互模式命令:

    3.1 maven-archetype-quickstart (Java Project)

    $ mvn archetype:generate -DgroupId=com.yiibai.core -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

    3.2 maven-archetype-webapp (Java Web Project)

    $ mvn archetype:generate -DgroupId=com.yiibai.web -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    Maven基本操作

    Maven 构建生命周期

    构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
    这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

    阶段

    处理

    描述

    准备资源

    资源复制

    资源复制可以进行定制

    编译

    执行编译

    源代码编译在此阶段完成

    包装

    打包

    创建JAR/WAR包如在 pom.xml 中定义提及的包

    安装

    安装

    这一阶段在本地/远程Maven仓库安装程序包

    可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后阶段。
     Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标。 Maven有以下三种标准的生命周期:

    • clean
    • default( build)
    • site

    目标代表一个特定的任务,它有助于项目的建设和管理。可以被绑定到零个或多个生成阶段。一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行。
    执行的顺序取决于目标和构建阶段折调用顺序。例如,考虑下面的命令。清理和打包(mvn clean)参数的构建阶段,而 dependency:copy-dependencies package 是一个目标。

    mvn clean dependency:copy-dependencies package

    在这里,清洁的阶段,将首先执行,然后是依赖关系:复制依赖性的目标将被执行,并终于将执行包阶段。

    清洁生命周期

    当我们执行命令 mvn clean 命令后,Maven 调用清洁的生命周期由以下几个阶段组成:

    • pre-clean
    • clean
    • post-clean

    Maven 清洁目标(clean:clean)被绑定清洁干净的生命周期阶段。clean:clean 目标删除 build 目录下的构建输出。因此,当 mvn clean 命令执行时,Maven会删除编译目录。

    目标清洁生命周期在上述阶段,我们可以自定义此行为。
    在下面的示例中,我们将附加 maven-antrun-plugin:run 对目标进行预清洁,清洁和清洁后这三个阶段。这将使我们能够调用的信息显示清理生命周期的各个阶段。
    现在来创建了一个 pom.xml 文件在 C:MVN 项目文件夹中,具体内容如下:

    <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>com.companyname.projectgroup</groupId>

    <artifactId>project</artifactId>

    <version>1.0</version>

    <build>

    <plugins>

       <plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-antrun-plugin</artifactId>

       <version>1.1</version>

       <executions>

          <execution>

             <id>id.pre-clean</id>

             <phase>pre-clean</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>pre-clean phase</echo>

                </tasks>

             </configuration>

          </execution>

          <execution>

             <id>id.clean</id>

             <phase>clean</phase>

             <goals>

              <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>clean phase</echo>

                </tasks>

             </configuration>

          </execution>

          <execution>

             <id>id.post-clean</id>

             <phase>post-clean</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>post-clean phase</echo>

                </tasks>

             </configuration>

          </execution>

       </executions>

       </plugin>

    </plugins>

    </build>

    </project>

    现在,打开命令控制台,到该文件夹包含  pom.xml 并执行以下 mvn 命令。

    C:MVNproject>mvn post-clean

    Maven将开始处理并显示清理生命周期的所有阶段。

    [INFO] Scanning for projects...

    [INFO] ------------------------------------------------------------------

    [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0

    [INFO] task-segment: [post-clean]

    [INFO] ------------------------------------------------------------------

    [INFO] [antrun:run {execution: id.pre-clean}]

    [INFO] Executing tasks

    [echo] pre-clean phase

    [INFO] Executed tasks

    [INFO] [clean:clean {execution: default-clean}]

    [INFO] [antrun:run {execution: id.clean}]

    [INFO] Executing tasks

    [echo] clean phase

    [INFO] Executed tasks

    [INFO] [antrun:run {execution: id.post-clean}]

    [INFO] Executing tasks

    [echo] post-clean phase

    [INFO] Executed tasks

    [INFO] ------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------

    [INFO] Total time: < 1 second

    [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012

    [INFO] Final Memory: 4M/44M

    [INFO] ------------------------------------------------------------------

    你可以尝试调整 mvn 清洁命令,该命令将显示清洁前什么都不会被执行。

    默认(或生成)生命周期

    这是 Maven 主要的生命周期,用于构建应用程序。它有以下 23 个阶段。

    生命周期阶段

    描述

    validate

    验证项目是否正确,并且所有必要的信息可用于完成构建过程

    initialize

    建立初始化状态,例如设置属性

    generate-sources

    产生任何的源代码包含在编译阶段

    process-sources

    处理源代码,例如,过滤器值

    generate-resources

    包含在包中产生的资源

    process-resources

    复制和处理资源到目标目录,准备打包阶段

    compile

    编译该项目的源代码

    process-classes

    从编译生成的文件提交处理,例如:Java类的字节码增强/优化

    generate-test-sources

    生成任何测试的源代码包含在编译阶段

    process-test-sources

    处理测试源代码,例如,过滤器任何值

    test-compile

    编译测试源代码到测试目标目录

    process-test-classes

    处理测试代码文件编译生成的文件

    test

    运行测试使用合适的单元测试框架(JUnit

    prepare-package

    执行必要的任何操作的实际打包之前准备一个包

    package

    提取编译后的代码,并在其分发格式打包,如JARWAREAR文件

    pre-integration-test

    完成执行集成测试之前所需操作。例如,设置所需的环境

    integration-test

    处理并在必要时部署软件包到集成测试可以运行的环境

    pre-integration-test

    完成集成测试已全部执行后所需操作。例如,清理环境

    verify

    运行任何检查,验证包是有效的,符合质量审核规定

    install

    将包安装到本地存储库,它可以用作当地其他项目的依赖

    deploy

    复制最终的包到远程仓库与其他开发者和项目共享

    有涉及到Maven 生命周期值得一提几个重要概念:

    • 当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。
    • 不同的 Maven 目标绑定到 Maven生命周期的不同阶段这是这取决于包类型(JAR/WAR/EAR) 

    在下面的示例中,将附加 Maven  antrun 插件:运行目标构建生命周期的几个阶段。这将使我们能够回显的信息显示生命周期的各个阶段。
    我们已经更新了在 C:MVN 项目文件夹中的 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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.companyname.projectgroup</groupId>

    <artifactId>project</artifactId>

    <version>1.0</version>

    <build>

    <plugins>

    <plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-antrun-plugin</artifactId>

    <version>1.1</version>

    <executions>

       <execution>

          <id>id.validate</id>

          <phase>validate</phase>

          <goals>

             <goal>run</goal>       </goals>

          <configuration>

             <tasks>

                <echo>validate phase</echo>

             </tasks>

          </configuration>

       </execution>

       <execution>

          <id>id.compile</id>

          <phase>compile</phase>

          <goals>

             <goal>run</goal>

          </goals>

          <configuration>

             <tasks>

                <echo>compile phase</echo>

             </tasks>

          </configuration>

       </execution>

       <execution>

          <id>id.test</id>

          <phase>test</phase>

          <goals>

             <goal>run</goal>

          </goals>

          <configuration>

             <tasks>

                <echo>test phase</echo>

             </tasks>

          </configuration>

       </execution>

       <execution>

             <id>id.package</id>

             <phase>package</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

             <tasks>

                <echo>package phase</echo>

             </tasks>

          </configuration>

       </execution>

       <execution>

          <id>id.deploy</id>

          <phase>deploy</phase>

          <goals>

             <goal>run</goal>

          </goals>

          <configuration>

          <tasks>

             <echo>deploy phase</echo>

          </tasks>

          </configuration>

       </execution>

    </executions>

    </plugin>

    </plugins>

    </build>

    </project>

    现在,打开命令控制台,进入包含 pom.xml 并执行以下 mvn 命令。

    C:MVNproject>mvn compile

    编译阶段,Maven 将开始构建生命周期的阶段处理并显示。

    [INFO] Scanning for projects...

    [INFO] ------------------------------------------------------------------

    [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0

    [INFO] task-segment: [compile]

    [INFO] ------------------------------------------------------------------

    [INFO] [antrun:run {execution: id.validate}]

    [INFO] Executing tasks

    [echo] validate phase

    [INFO] Executed tasks

    [INFO] [resources:resources {execution: default-resources}]

    [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,

    i.e. build is platform dependent!

    [INFO] skip non existing resourceDirectory C:MVNprojectsrcmain esources

    [INFO] [compiler:compile {execution: default-compile}]

    [INFO] Nothing to compile - all classes are up to date

    [INFO] [antrun:run {execution: id.compile}]

    [INFO] Executing tasks

    [echo] compile phase

    [INFO] Executed tasks

    [INFO] ------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------

    [INFO] Total time: 2 seconds

    [INFO] Finished at: Sat Jul 07 20:18:25 IST 2012

    [INFO] Final Memory: 7M/64M

    [INFO] ------------------------------------------------------------------

    网站的生命周期

    Maven的网站插件通常用于创建新的文档,创建报告,部署网站等。
    阶段

    • pre-site
    • site
    • post-site
    • site-deploy

    在下面的示例中,我们将附加 maven-antrun-plugin:run 目标网站的生命周期的所有阶段。这将使我们能够调用短信显示的生命周期的各个阶段。
    现在更新 pom.xml 文件在 C:MVN 项目文件夹中。

    <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>com.companyname.projectgroup</groupId>

    <artifactId>project</artifactId>

    <version>1.0</version>

    <build>

    <plugins>

    <plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-antrun-plugin</artifactId>

    <version>1.1</version>

       <executions>

          <execution>

             <id>id.pre-site</id>

             <phase>pre-site</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>pre-site phase</echo>

                </tasks>

             </configuration>

          </execution>

          <execution>

             <id>id.site</id>

             <phase>site</phase>

             <goals>

             <goal>run</goal>

             </goals>

             <configuration><tasks>

                   <echo>site phase</echo>

                </tasks>

             </configuration>

          </execution>

          <execution>

             <id>id.post-site</id>

             <phase>post-site</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>post-site phase</echo>

                </tasks>

             </configuration>

          </execution>

          <execution>

             <id>id.site-deploy</id>

             <phase>site-deploy</phase>

             <goals>

                <goal>run</goal>

             </goals>

             <configuration>

                <tasks>

                   <echo>site-deploy phase</echo>

                </tasks>

             </configuration>

          </execution>

       </executions>

    </plugin>

    </plugins>

    </build>

    </project>

    打开命令控制台,进入该文件夹包含 pom.xml 并执行以下 mvn 命令。

    C:MVNproject>mvn site

    Maven将开始处理并显示网站的生命周期阶段的各个阶段。

    [INFO] Scanning for projects...

    [INFO] ------------------------------------------------------------------

    [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0

    [INFO] task-segment: [site]

    [INFO] ------------------------------------------------------------------

    [INFO] [antrun:run {execution: id.pre-site}]

    [INFO] Executing tasks

    [echo] pre-site phase

    [INFO] Executed tasks

    [INFO] [site:site {execution: default-site}]

    [INFO] Generating "About" report.

    [INFO] Generating "Issue Tracking" report.

    [INFO] Generating "Project Team" report.

    [INFO] Generating "Dependencies" report.

    [INFO] Generating "Project Plugins" report.

    [INFO] Generating "Continuous Integration" report.

    [INFO] Generating "Source Repository" report.

    [INFO] Generating "Project License" report.

    [INFO] Generating "Mailing Lists" report.

    [INFO] Generating "Plugin Management" report.

    [INFO] Generating "Project Summary" report.

    [INFO] [antrun:run {execution: id.site}]

    [INFO] Executing tasks

    [echo] site phase

    [INFO] Executed tasks

    [INFO] ------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------

    [INFO] Total time: 3 seconds

    [INFO] Finished at: Sat Jul 07 15:25:10 IST 2012

    [INFO] Final Memory: 24M/149M

    [INFO] -

     

    使用Maven构建项目

    要构建一个基于Maven的项目,打开控制台,进入到 pom.xml 文件所放的项目文件夹,并发出以下命令:

    mvn package

    这将执行Maven"package"阶段。

    Maven构建生命周期
    Maven
    是分阶段运行,阅读 默认的Maven构建生命周期文章。因此,执行"package"阶段的时候,所有阶段 – "validate", "compile" "test", 包括目前的阶段"package"将被执行。

    "mvn package" 示例

    当你运行"mvn package"命令,它会编译源代码,运行单元测试和包装这取决于在pom.xml文件的"packaging"标签。 例如,

    1. If "packaging" = jar, 将您的项目打包成一个"jar"文件,并把它变成你的目标文件夹。

    File : pom.xml

    <project...><modelVersion>4.0.0</modelVersion><groupId>com.yiibai</groupId><artifactId>Maven Example</artifactId><packaging>jar</packaging> ...

    2. 如果 "packaging" = war,将您的项目打包成"war"文件,并把它变成目标文件夹。

    File : pom.xml

    <project...><modelVersion>4.0.0</modelVersion><groupId>com.yiibai</groupId><artifactId>Maven Example</artifactId><packaging>war</packaging> ...

    使用Maven清理项目

    在基于Maven的项目中,很多缓存输出在"target"文件夹中。如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署。

    要清理项目缓存的输出,发出以下命令:

    mvn clean

    可以查看到输出结果

    C:workspyiibaiweb-core>mvn clean

    [INFO] Scanning for projects...

    [INFO]

    [INFO] ------------------------------------------------------------------------

    [INFO] Building yiibaiweb-core 1.0-SNAPSHOT

    [INFO] ------------------------------------------------------------------------

    [INFO]

    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ yiibaiweb-core ---

    [INFO] Deleting C:workspyiibaiweb-core arget

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 0.538 s

    [INFO] Finished at: 2015-11-03T07:32:48+08:00

    [INFO] Final Memory: 6M/77M

    [INFO] ------------------------------------------------------------------------

     

    "mvn clean"执行,在"target"文件夹中的一切都将被删除。

    部署进行生产
    要部署您的项目进行生产,它总是建议使用 "mvn clean package", 以确保始终获得最新的部署。

    使用Maven运行单元测试

    要通过Maven运行单元测试,发出此命令:

    mvn test

    这会在你的项目中运行整个单元测试。

    案例学习

    创建两个单元测试,并通过 Maven 的运行它。参见一个简单的 Java 测试类:

    package com.yiibai.core;

     

    public class App {

        public static void main(String[] args) {

     

            System.out.println(getHelloWorld());

     

        }

     

        public static String getHelloWorld() {

     

            return "Hello World";

     

        }

     

        public static String getHelloWorld2() {

     

            return "Hello World 2";

     

        }

    }

    Unit Test 1

    单元测试为getHelloWorld()方法。

    package com.yiibai.core;

     

    import junit.framework.Assert;

    import org.junit.Test;

     

    public class TestApp1 {

     

        @Test

        public void testPrintHelloWorld() {

     

            Assert.assertEquals(App.getHelloWorld(), "Hello World");

     

        }

     

    }

    Unit Test 2

    单元测试为getHelloWorld2()方法。

    package com.yiibai.core;

     

    import junit.framework.Assert;

    import org.junit.Test;

     

    public class TestApp2 {

     

        @Test

        public void testPrintHelloWorld2() {

     

            Assert.assertEquals(App.getHelloWorld2(), "Hello World 2");

     

        }

     

    }

    运行单元测试

    使用Maven运行单元测试看见下面的例子。

    示例 1
    运行整个单元测试(TestApp1TestApp2),发出以下命令:

    mvn test

    示例 2
    为了运行单个测试(TestApp1),发出此命令:

    mvn -Dtest=TestApp1 test [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ yiibai-core --

    [INFO] Nothing to compile - all classes are up to date

    [INFO]

    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ y

    ibai-core ---

    [INFO] Using 'UTF-8' encoding to copy filtered resources.

    [INFO] skip non existing resourceDirectory C:workspyiibai-coresrc est esou

    ces

    [INFO]

    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ yiibai

    core ---

    [INFO] Nothing to compile - all classes are up to date

    [INFO]

    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ yiibai-core ---

    [INFO] Surefire report directory: C:workspyiibai-core argetsurefire-reports

     

    -------------------------------------------------------

    T E S T S

    -------------------------------------------------------

    Running com.yiibai.core.TestApp1

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

     

    Results :

     

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

     

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 2.143 s

    [INFO] Finished at: 2015-11-03T20:29:50+08:00

    [INFO] Final Memory: 11M/114M

    [INFO] ------------------------------------------------------------------------

    示例 3
    为了运行单个测试(TestApp2),发出此命令:

    mvn -Dtest=TestApp2 test

    注意
    欲了解更多"mvn test"的例子,请参考Maven测试插件文档

     

    将项目安装到Maven本地资源库

    Maven中,可以使用"mvn install"打包项目,并自动部署到本地资源库,让其他开发人员使用它。

    mvn install

    注意,
    "install"在执行阶段,上述所有阶段 "validate", "compile", "test", "package", "integration-test", "verify" 阶段, 包括目前的"install"阶段将被执行有序。请参阅Maven的生命周期细节。

    mvn install 示例

    一个Java项目,具有以下 pom.xml 文件

    File : 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.yiibai.core</groupId>

    <artifactId>yiibai-core</artifactId>

    <packaging>jar</packaging>

    <version>99</version>

    <name>yiibai-core</name>

    <url>http://maven.apache.org</url>

    <dependencies>

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.4</version>

    <scope>test</scope>

    </dependency>

    </dependencies>

    </project>

    基于以上pom.xml文件,在"mvn install"被执行,它会打包项目为"yiibai-core-99.jar"文件,并复制到本地存储库。

    警告
    它总是建议运行"clean""install"在一起,让您能始终部署最新的项目到本地存储库。

    mvn clean install

    生成基于Maven的项目文档站点

    Maven中,可以使用"mvn site",为您的项目信息生成文档站点。

    mvn site

    生成的网站是在项目的"target/site"文件夹中。

    mvn site 示例

    请参见通过"mvn site"命令生成的文件列表。

    文档页面的样本如下。

    使用"mvn site-deploy"部署站点(WebDAV例子)

    这里有一个指南,向您展示如何使用"mvn site:deploy"来自动部署生成的文档站点到服务器,这里通过WebDAV机制说明。

    P.S 在这篇文章中,我们使用的是Apache服务器2.xWebDAV功能。

    1. 启用 WebDAV

    请参见本指南,了解 如何启用WebDAV访问Apache 2.x服务器

    2. 配置在何处部署

    pom.xml 中,配置在 "distributionManagement" 标签部署你的网站。

    <distributionManagement>

    <site>

    <id>yiibaiserver</id>

    <url>dav:http://127.0.0.1/sites/</url>

    </site>

    </distributionManagement>


    "dav"
    前缀是HTTP协议之前添加的,这意味着通过WebDAV机制部署您的网站。或者,可以用"scp"取代它,如果您的服务器支持"scp"访问。

    告诉Maven来使用"wagon-webdav-jackrabbit"扩展部署。

    <build>

        <extensions>

            <extension>

                <groupId>org.apache.maven.wagon</groupId>

                <artifactId>wagon-webdav-jackrabbit</artifactId>

                <version>1.0-beta-7</version>

            </extension>

        </extensions>

    </build>

    wagon-webdav
    一些人说可以使用"wagon-webdav",但这不是我试了不能正常工作,所以这里用"wagon-webdav-jackrabbit"代替。

    <extension>

    <groupId>org.apache.maven.wagon</groupId>

    <artifactId>wagon-webdav</artifactId>

    <version>1.0-beta-2</version>

    </extension>

     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.yiibai.core</groupId>

    <artifactId>yiibai-core</artifactId>

    <packaging>jar</packaging>

    <version>1</version>

    <name>yiibai-core</name>

    <url>http://maven.apache.org</url>

    <build>

        <extensions>

            <extension>

                <groupId>org.apache.maven.wagon</groupId>

                <artifactId>wagon-webdav-jackrabbit</artifactId>

                <version>1.0-beta-7</version>

            </extension>

        </extensions>

    </build>

    <distributionManagement>

    <site>

    <id>yiibaiserver</id>

    <url>dav:http://127.0.0.1/sites/</url>

    </site>

    </distributionManagement>

    </project>

    3. 配置WebDAV身份验证

    通常情况下,WebDAV是需要认证的访问。所以需要把相关的认证细节(用户名和密码)%MAVEN_PATH%/conf/settings.xml.

    File : settings.xml

    <servers>

        <server>

            <id>yiibaiserver</id>

            <username>admin</username>

            <password>123456</password>

        </server>

    </servers>

     "yiibaiserver" 是什么 ?
    Maven"settings.xml"文件服务器ID将在"pom.xml"文件被网站引用。

    4. mvn site:deploy

    "mvn site:deploy" 命令执行:

    C:workspyiibai-core>mvn site:deploy

    ... ...

    Transfer finished. 11622 bytes copied in 0.021 seconds

    十一月 03, 2015 9:00:07 下午 org.apache.commons.httpclient.auth.AuthChallengePro

    cessor selectAuthScheme

    信息: digest authentication scheme selected

    Uploading: .//project-info.html to http://127.0.0.1/sites/

     

    ##十一月 03, 2015 9:00:07 下午 org.apache.commons.httpclient.auth.AuthChallengeP

    rocessor selectAuthScheme

    信息: digest authentication scheme selected

    ##http://127.0.0.1/sites//./project-info.html - Status code: 201

     

    Transfer finished. 11170 bytes copied in 0.035 seconds

    十一月 03, 2015 9:00:07 下午 org.apache.commons.httpclient.auth.AuthChallengePro

    cessor selectAuthScheme

    信息: digest authentication scheme selected

    Uploading: .//project-summary.html to http://127.0.0.1/sites/

     

    ##十一月 03, 2015 9:00:07 下午 org.apache.commons.httpclient.auth.AuthChallengeP

    rocessor selectAuthScheme

    信息: digest authentication scheme selected

    ##http://127.0.0.1/sites//./project-summary.html - Status code: 201

     

    Transfer finished. 10190 bytes copied in 0.021 seconds

    http://127.0.0.1/sites/ - Session: Disconnecting

    http://127.0.0.1/sites/ - Session: Disconnected

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 28.737 s

    [INFO] Finished at: 2015-11-03T21:00:07+08:00

    [INFO] Final Memory: 14M/156M

    [INFO] ------------------------------------------------------------------------

    所有站点文件夹和文件,在项目文件夹- "target/site"会被自动部署到服务器。

    5. 输出

    在本例中,可以通过这个网址访问该部署的站点:http://127.0.0.1/sites/,见下图:

    部署基于Maven的war文件到Tomcat

    在本教程中,我们将学习如何使用MavenTomcat插件打包并部署一个WAR文件到Tomcat(Tomcat67

    要用到工具:

    1. Maven 3
    1. Tomcat 6.0.37
    2. Tomcat 7.0.53

    Tomcat 7
    发布URL = http://localhost:8080/manager/text
    命令 = mvn tomcat7:deploy

    Tomcat 6
    发布 URL = http://localhost:8080/manager/
    命令 = mvn tomcat6:deploy

    1. Tomcat 7 示例

    这个例子说明了如何在Tomcat7打包并部署WAR文件。

    1.1 Tomcat 认证
    添加具有角色管理器GUI和管理脚本的用户。

    %TOMCAT7_PATH%/conf/tomcat-users.xml

    <?xml version='1.0' encoding='utf-8'?>

    <tomcat-users>

     

        <role rolename="manager-gui"/>

        <role rolename="manager-script"/>

        <user username="admin" password="password" roles="manager-gui,manager-script" />

     

    </tomcat-users>

     

    1.2 Maven 认证
    添加在上面Maven 设置文件的 Tomcat 用户,是之后Maven使用此用户来登录Tomcat服务器。

    %MAVEN_PATH%/conf/settings.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <settings ...>

        <servers>

          

            <server>

                <id>TomcatServer</id>

                <username>admin</username>

                <password>password</password>

            </server>

     

        </servers>

    </settings>

     

    1.3 Tomcat7 Maven 插件
    声明一个MavenTomcat插件。

    pom.xml

        <plugin>

            <groupId>org.apache.tomcat.maven</groupId>

            <artifactId>tomcat7-maven-plugin</artifactId>

            <version>2.2</version>

            <configuration>

                <url>http://localhost:8080/manager/text</url>

                <server>TomcatServer</server>

                <path>/yiibaiWebApp</path>

            </configuration>

        </plugin>

     

    怎么运行的?
    在部署过程中,它告诉 Maven 通过部署 WAR 文件Tomcat服务器, "http://localhost:8080/manager/text" , 在路径"/yiibaiWebApp", 使用 "TomcatServer" (settings.xml) 用户名和密码来进行认证。

    1.4 发布到Tomcat
    以下的命令是用来操纵Tomcat WAR文件。

    mvn tomcat7:deploy

    mvn tomcat7:undeploy

    mvn tomcat7:redeploy

    示例

    > mvn tomcat7:deploy

     

    ...

    [INFO] Deploying war to http://localhost:8080/yiibaiWebApp

    Uploading: http://localhost:8080/manager/text/deploy?path=%2FyiibaiWebApp&update=true

    Uploaded: http://localhost:8080/manager/text/deploy?path=%2FyiibaiWebApp&update=true (13925 KB at 35250.9 KB/sec)

     

    [INFO] tomcatManager status code:200, ReasonPhrase:OK

    [INFO] OK - Deployed application at context path /yiibaiWebApp

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 8.507 s

    [INFO] Finished at: 2015-08-05T11:35:25+08:00

    [INFO] Final Memory: 28M/308M

    [INFO] ------------------------------------------------------------------------

    2. Tomcat 6 示例

    这个例子说明了如何在Tomcat6打包和部署WAR文件。这些步骤和Tomcat7是一样的,只是部署URL和命令名称不同。

    2.1 Tomcat 认证

    %TOMCAT6_PATH%/conf/tomcat-users.xml

    <?xml version='1.0' encoding='utf-8'?>

    <tomcat-users>

     

        <role rolename="manager-gui"/>

        <role rolename="manager-script"/>

        <user username="admin" password="password" roles="manager-gui,manager-script" />

     

    </tomcat-users>

    2.2 Maven 认证

    %MAVEN_PATH%/conf/settings.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <settings ...>

        <servers>

          

            <server>

                <id>TomcatServer</id>

                <username>admin</username>

                <password>password</password>

            </server>

     

        </servers>

    </settings>

     

    2.3 Tomcat6 Maven 插件

    pom.xml

    <plugin>

            <groupId>org.apache.tomcat.maven</groupId>

            <artifactId>tomcat6-maven-plugin</artifactId>

            <version>2.2</version>

            <configuration>

                <url>http://localhost:8080/manager</url>

                <server>TomcatServer</server>

                <path>/yiibaiWebApp</path>

            </configuration>

        </plugin>    

     

    2.4 发布到Tomcat

    mvn tomcat6:deploy

    mvn tomcat6:undeploy

    mvn tomcat6:redeploy

    示例

    > mvn tomcat6:deploy

     

    ...

    [INFO] Deploying war to http://localhost:8080/yiibaiWebApp

    Uploading: http://localhost:8080/manager/deploy?path=%2FyiibaiWebApp

    Uploaded: http://localhost:8080/manager/deploy?path=%2FyiibaiWebApp (13925 KB at 32995.5 KB/sec)

     

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 22.652 s

    [INFO] Finished at: 2014-08-05T12:18:54+08:00

    [INFO] Final Memory: 30M/308M

    [INFO] ------------------------------------------------------------------------

    我的个人首页http://www.songaw.com
  • 相关阅读:
    使用uWSGI+Nginx+Supervisor部署管理Django应用程序
    Django REST framework使用ViewSets的自定义路由实现过程
    【转】nginx配置:location配置方法及实例详解
    Python模块的动态加载机制
    【转】Django中的request与response对象
    【转】Django Middleware
    【转】请求处理机制其三:view层与模板解析
    朝花夕拾
    买了台robosense的激光雷达,待开箱
    热力学量微分关系式总结+助记 Lebal:Research
  • 原文地址:https://www.cnblogs.com/songanwei/p/9035091.html
Copyright © 2020-2023  润新知