maven上

1.maven安装配置

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

所需工具 :
    JDK 1.8
    Maven 3.3.3
  1. JDK 和 JAVA_HOME
确保已安装JDK,并 “JAVA_HOME” 变量已加入到 Windows 环境变量。
java环境变量.png
  1. 下载http://maven.apache.org/download.cgi
    https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/
    下载 Maven 的 zip 文件,例如: apache-maven-3.5.0-bin.zip,将它解压到你要安装 Maven 的文件夹。

    maven下载.png

  2. 添加 M2_HOME 和 MAVEN_HOME


    3.png

    添加 M2_HOME 和 MAVEN_HOME 环境变量到 Windows 环境变量,并将其指向你的 Maven 文件夹。
    M2_HOME 或 MAVEN_HOME
    Maven 说只是添加 M2_HOME , 但一些项目仍引用 Maven 的文件夹 MAVEN_HOME, 因此,为了安全也把它添加进去。

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

  4. 验证


    maven1.png

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

2.maven启动代理访问

第一、检测本地网络是否不能直接访问Maven的远程仓库,命令为ping repo1.maven.org,截图如下:


第二、要检查代理服务器是否畅通,比如现在有一个IP地址为192.168.10.117,端口为3267的代理服务,我们需 要先运行telnet 192.168.10.117 3267来检查该地址的该端口是否畅通,如果得道出错信息需要先获取 正确的代理服务器信息,如果telnet连接正确,则输入ctrl+],然后q,回车,退出即可。
检查完毕之后,编辑~/.m2/settings.xml文件,代码如下:

添加代理配置如下:

  <settings> 

第一、检测本地网络是否不能直接访问Maven的远程仓库,命令为ping repo1.maven.org,截图如下:


第二、要检查代理服务器是否畅通,比如现在有一个IP地址为192.168.10.117,端口为3267的代理服务,我们需

  要先运行telnet  192.168.10.117 3267来检查该地址的该端口是否畅通,如果得道出错信息需要先获取

  正确的代理服务器信息,如果telnet连接正确,则输入ctrl+],然后q,回车,退出即可。

[图片上传中...(image-8b7de8-1553083476325-0)]
检查完毕之后,编辑~/.m2/settings.xml文件,代码如下:

添加代理配置如下:

<settings> 

...

    <proxies>

      <proxy>

         <id>my-proxy</id>

         <active>true</active>

         <protocol>http</protocol>

         <host>192.168.10.117</host>

         <port>3267</port>

         <!--

         <username>shihuan</username>

         <password>123456</password>

         <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>

         -->

      </proxy>

    </proxies>

...

</settings>

这段配置十分简单,proxies下可以有多个proxy元素,如果你声明了多个proxy元素,则默认情况下第一个被激活的proxy会生效。这里声明 了一个id为my-proxy的代理,active的值为true表示激活该代理,protocol表示使用的代理协议,这里是http。当然,最重要的 是指定正确的主机名(host元素)和端口(port元素)。上述XML配置中我注释掉了username、password、nonProxyHost 几个元素,当你的代理服务需要认证时,就需要配置username和password。nonProxyHost元素用来指定哪些主机名不需要代理,可以 使用 | 符号来分隔多个主机名。此外,该配置也支持通配符,如*.google.com表示所有以google.com结尾的域名访问都不要通过代理。

<proxies>

  <proxy>

     <id>my-proxy</id>

     <active>true</active>

     <protocol>http</protocol>

     <host>192.168.10.117</host>

     <port>3267</port>

     <!--

     <username>shihuan</username>

     <password>123456</password>

     <nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>

     -->

  </proxy>

</proxies>

...

</settings>

这段配置十分简单,proxies下可以有多个proxy元素,如果你声明了多个proxy元素,则默认情况下第一个被激活的proxy会生效。这里声明 了一个id为my-proxy的代理,active的值为true表示激活该代理,protocol表示使用的代理协议,这里是http。当然,最重要的 是指定正确的主机名(host元素)和端口(port元素)。上述XML配置中我注释掉了username、password、nonProxyHost 几个元素,当你的代理服务需要认证时,就需要配置username和password。nonProxyHost元素用来指定哪些主机名不需要代理,可以 使用 | 符号来分隔多个主机名。此外,该配置也支持通配符,如*.google.com表示所有以google.com结尾的域名访问都不要通过代理。

3.maven本地资源库

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

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

  1. Unix / Mac OS X - 〜/ .m2
  2. Windows - C:\ Documents and Settings \ {your-username} \。m2

1.更新Maven的本地库

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

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

{M2_HOME} \ CONF \ Setting.xml的

2.保存文件

执行之后,新的Maven本地存储库现在改为D:\ software \ yiibai.com \ apache-maven \ repository。

4.maven中央存储库

https://search.maven.org/

5.如何从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 步,否则退出。
  2. 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
  3. 在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。

6.maven添加远程仓库

默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库丢失在中央存储库,只有在 spring的储存库远程仓库中能找到。
例如springboot2.x

<!-- Add Spring repositories -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
  <repository>
  <id>spring-snapshots</id>
  <url>https://repo.spring.io/snapshot</url>
  <snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
  <id>spring-milestones</id>
  <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>

7.maven依赖机制

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

案例分析

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

1.在传统方式

  1. 访问 http://logging.apache.org/log4j/
  2. 下载 Log4 j的 jar 库
  3. 复制 jar 到项目类路径
  4. 手动将其包含到项目的依赖
  5. 所有的管理需要一切由自己做

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

2. 在Maven的方式

  1. 你需要知道 log4j 的 Maven 坐标,例如:
 <dependency>
  <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j</artifactId>
  <version>2.11.2</version>
  <type>pom</type>
</dependency>
  1. 它会自动下载 log4j 的1.2.14 版本库。如果“version”标签被忽略,它会自动升级库时当有新的版本时。

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

  <dependencies>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>2.11.2</version>
      <type>pom</type>
    </dependency>
</dependencies>
  1. 当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库
  2. 所有由 Maven 管理

解释说明

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

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

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

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

8.定制库到maven本地资源库

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

    要使用的 jar 不存在于 Maven 的中心储存库中。


    您创建了一个自定义的 jar ,而另一个 Maven 项目需要使用。



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


案例学习


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


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

1. mvn 安装

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

mvn install:install-file -Dfile=./kaptcha-2.3.jar -DgroupId=co
m.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar

示例:

E:\壁纸\maven图片>mvn install:install-file -Dfile=./kaptcha-2.3.jar -DgroupId=co
m.google.code.kaptcha -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_repo\com\google\code\kaptcha\2.3\kaptcha-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 本地存储库检索了。

下载jar到本地maven仓库.png

9.使用maven创建java项目

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

所需要的工具:

  1. Maven 3.5
  2. idea2018.1
  3. JDK 8

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

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

在终端(* UNIX或Mac)或命令提示符(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
看到 BUILD SUCCESS 就是成功

注意
有少数用户说 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</pre>

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

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

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

pom.xml

3. idea IDE

导入项目到idea IDE中,选择 “File -> open… -> 找到自己文件的pom文件->open as project ->new project”


open.png

4. 更新POM

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

<project>
  <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
   </plugins>
  </build>
</project>

从更新JUnit 3.8.1到最新的 4.10。

 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.10</version>
  <scope>test</scope>
</dependency> 

Maven 坐标

上面的XML代码片段被称为“Maven坐标”,如果你需要 JUnit 的 jar,你需要找出其相应的 Maven 坐标。它适用于所有其他的依赖,如Spring,Hibernate,Apache 普通的等,只要到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.10</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.7.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
  </plugins>
</build>

</project>

在pom.xml右击maven->download sources ,Maven将从Maven中心储存库下载插件项目依赖关系(JUnit),它会自动保存到你的本地仓库。


downsource.png

5. 更新业务逻辑

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

AppTest.java

 package com.yiibai;

import org.junit.Assert;
import org.junit.Test;

public class AppTest {

@org.junit.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

<pre><project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai</groupId>
<artifactId>NumberGenerator</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version></pre>

在终端输入 mvn package :

Administrator@B867EM03U0IO5JI MINGW64 /e/壁纸/maven图片/NumberGenerat

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.094 s
[INFO] Finished at: 2019-03-20T22:49:07+08:00
[INFO] Final Memory: 14M/131M
[INFO] ------------------------------------------------------------------------

它编译,运行单元测试并打包项目成一个 jar 文件,并把它放在 project/target 文件夹。如果出错:ERROR: Unable to locate the Javac Compiler in:, C:\Program Files (x86)\Java\jre6..\lib\tools.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

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

项目目录.png

7. 示例

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

Administrator@B867EM03U0IO5JI MINGW64 /e/壁纸/maven图片/NumberGenerat
$ java -cp target/NumberGenerat-1.0-SNAPSHOT.jar com.yiibai.App
Hello World!
Unique ID : 023ac474-796c-45d1-b53a-91014dc1250f

10.使用maven创建web应用程序

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

用到的技术/工具:

  1. Maven 3.5
  2. idea 2018.1
  3. JDK 8
  4. Spring 4.1.1.RELEASED
  5. Tomcat 8.5
  6. Logback 1.0.13

1. 从Maven模板创建Web项目

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

键入以下命令:

E:\壁纸\maven图片>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=Count
erWebApp -DarchetypeArtifactId=maven-archetype-webapp

具体示例 :

E:\壁纸\maven图片>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=Count
erWebApp -DarchetypeArtifactId=maven-archetype-webapp
[INFO] -----------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------------
[INFO] Total time: 01:42 min
[INFO] Finished at: 2019-03-20T23:17:46+08:00
[INFO] Final Memory: 18M/194M

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

2. 项目目录布局

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

|____CounterWebApp
||____pom.xml
||____src
|||____main
||||____resources
||||____webapp
|||||____index.jsp
|||||____WEB-INF
||||||____web.xml</pre>

Maven 产生了一些文件夹,一个部署描述符 web.xml,pom.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></pre>

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

 <pre class="prettyprint lang-xml"><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" 

 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></pre>

3.idea IDE 支持

要导入这个项目到idea中,和maven jar包项目一样。

4. 更新POM

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

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

阅读注释清楚明了。

pom.xml

  <project xmlns="[http://maven.apache.org/POM/4.0.0](http://maven.apache.org/POM/4.0.0)" 
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
xsi:schemaLocation="[http://maven.apache.org/POM/4.0.0](http://maven.apache.org/POM/4.0.0)  [http://maven.apache.org/maven-v4_0_0.xsd](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>
    
      <!-- 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>
    </plugins>
</build>
</project>

5. 更新源代码

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

<pre class="prettyprint">.
|____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</pre>

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

创建mvc控制类.png

创建目录.png
设置src下main的java文件.png
设置src下main的java文件2.png
设置src下main的java文件3.png

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   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 3.0(默认的Servlet2.3 太旧了), 并且还通过 Spring 监听器 ContextLoaderListener 集成了Spring框架。

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

<!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 version="3.0" 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_3_0.xsd">
<display-name>Archetype Created 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"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/home" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    </encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件输出的文件名-->
        <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
        <!--日志文件保留天数-->
        <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    </encoder>
    <!--日志文件最大的大小-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>

<!-- 日志输出级别 -->
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>
</configuration>

6. idea + Tomcat

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

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

6.2mvn package


打开当前操作窗口.png
编码.png

1.可能编译不通过提示gbk
需要修改setting编码


第几行第几列.png
可以指定到.png

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

然后我们再到E:\壁纸\maven图片\CounterWebApp\target\CounterWebApp\WEB-INF\lib目录下,发现工程WEB-INF目录下自动生成了lib目录,并且所有的依赖jar包也都已经部署进来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355