Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html

  http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html(IDEA 使用教程,写的不错哟~~)

          孔老师的SpringMVC视频教程

记录: 本节主要完成 使用 maven 管理 spring + 项目 包,搭建 maven+spring 的 web 项目平台。

前提: 已安装并配置好 

 - Intellij IDEA 16.3.5 Ultimate

 - JDK 1.8.0_45

 - Maven 3.3.9

 - Tomcat 8.5.12

 - MySql 5.7

 - Spring 4.0.0

- Bootstrap 3.3.5 (可有可无)

不清楚的可参考 

1. 创建 Maven 项目

对于不使用Maven的开发者,可以直接建一个简单的Web项目。使用Maven的话,请按照图进行操作。

(1)File->New Project 可进入以下界面:首先选择左边栏Maven,再配置JDK(一般如果之前添加了JDK的话会自动填充,如未添加的话点击旁边的New将JDK目录导入即可)。勾选“Create from archetype“,然后选中4处蓝色位置webapp,点Next。

 

(2)Next 后进入如下界面:这里需要填写GroupId和ArtifactId还有Version,这三个属性目的是标识你的项目的唯一性,比如Tomcat的GroupId是org.apache,即它是apache组织的项目,ArtifactId是tomcat,项目名为tomcat,而我当前使用的Version是7.0.68。这些只在发布时有用,在此可以随便填写,填好后点Next。

 (3)Next 后,进入如下界面(配置 maven ):打开Maven home directory,可以发现IntelliJ IDEA已经集成了Maven 2和Maven 3两个版本,如果使用默认集成的maven的话,选择Buldled(Maven 3),直接点击Next。

我们也可以导入本地新安装的较新的Maven版本,点击蓝色箭头右边的 ... 按钮将Maven路径导入即可,点击Next:

(4)Next 后进入如下界面:填写项目名(可与上面 ID 相同,也可不同),选择项目保存路径,点击Finish:

 

 说明:(1)相比较于多 Module 项目,小项目就无需搞得这么复杂。只有一个 Module 的结构 IntelliJ IDEA 也是支持的,并且 IntelliJ IDEA 创建项目的时候,默认就是单 Module 的结构的。

(2) 如上图,在输入 Project name 的时候,Module name 和 Module file Location 自动进行改变,同时 Project location Module file Location 完全一样,这也就表示,Project 目录 Module 目录是同一个,所以此时 Project 目录下就会有 src 目录,但是我们应该明白其本质还是 Module 的目录

(5)finish 后,进入如下界面,maven会在后台生成web项目,这需要等待一定的时间,视网络环境而定,经验发现用较新版本的maven项目生成更快,使用IDEA集成的maven可能会等待很长一段实践。

左边红框中展示了该项目的文件结构。可以发现:

(1)如上图标注 1 所示,.idea 即为 Project 的配置文件目录。

        如上图标注 2 所示,.iml 即为 Module 的配置文件目录。  

  • 通过上面的了解我们也知道 IntelliJ IDEA 项目的配置变动都是以这些 XML 文件的方式来表现的,所以我们也可以通过了解这些 XML 文件来了解 IntelliJ IDEA 的一些配置。也因为此特性,所以如果在项目协同中,我们要保证所有的项目配置一致,就可以考虑把这些配置文件上传到版本控制中。如果把这些文件加入到版本控制之后,那又有一点是需要考虑的,那就是协同者 Checkout 项目下来之后,按自己的需求进行项目配置的之后,项目的 XML 文件也会跟着变化。此时协同者的这些变化的文件就不应该再上传到版本控制中。至于如何更好地控制这些不想随时提交的文件,在接下来的版本控制专讲中会进行详细讲解。

(2)在src/main下创建了以下文件夹:

recources文件夹:一般用来存放一些资源文件
webapp文件夹:用来存放 web 配置文件以及 jsp 页面等,这已经组成了一个原始的 web 应用。

注意:选择 右边红框 的 Enable-Auto-Import,可以在每次修改 pom.xml 后,自动的下载并导入 jar 包,这一点在后面详述。

2. 新建 source 文件夹并命名为 Java,并设置:

(1) 按 ctrl+alt+shift+s,或者File->Project Structure,或点击如下:查看项目结构

出现如下图:

(2)选择Modules,在SpringMVCDemo的srcmain文件夹中新建一个文件夹,取名为java:

接着,选中java文件夹,点击上面的 Make as:Sources,该文件夹就会变成蓝色,用以保存java代码,按OK,结束配置。

3.Maven自动导入jar包(添加项目包):包括 Spring 包(使用 spring 框架),测试包,日志包 等... 

既然我们要用 SpringMVC 开发,那肯定少不了 SpringMVC 的相关 jar 包。如果不使用 Maven 的话,那就需要去官网下载相关的jar包,然后导入到项目中。现在使用 maven 的话,就不需要上网找jar包了。具体容我一一道来。

    Maven所做的工作其实很简单,就是自动把你需要的jar包下载到本地,然后关联到项目中来。maven的所有jar包都是保存在几个中央仓库里面的,其中一个最常用的是Maven Repository,即,你需要什么 jar 包,它就会从仓库中拿给你。那么如何告诉 maven 需要什么 jar 包呢?我们看看工程目录,能找到一个 pom.xml 文件(这个文件在刚创建好项目时就已经展现在了大家面前),maven 就是靠它来定义需求的,代码如下:

<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.example</groupId>
    <artifactId>testWeb</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>testWeb 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>testWeb</finalName>
    </build>
</project>

    我们可以看到这个文件包含了我们之前定义的本项目的gropId等信息,这些信息是该项目的标识,我们不要去改动它们。

    重点看<dependencies>标签,翻译过来是”依赖“的意思,也就是说把对每个包的需求都称为一个依赖<depedency>,定义在<dependencies>中。在每个<depedency>中,你需要提供的是所需 jar包的 groupId、artifactId、version 这三个必要信息。比如上面我们看到引入可一个 junit 包,格式如下:

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

    这是单元测试包,提供了三个基本信息,第4个 scope 对其他包来说是非必需的。所有jar包的引入都要满足这个格式。那么如何查看这些 jar 包的3个信息呢,可能刚接触是开发者还不是很熟悉,这个时候就需要查阅仓库了。比如我们需要引入 Spring 核心 jar 包 spring-core,打开Maven Repository搜索spring-core,进入如下界面:

 点击进入红框选中的 Spring Core,如下所示,可以看到各版本的使用情况:

   选择使用最多版本 4.3.7.RELEASE,可以看到其dependency写法如下红框所示:

  我们将其复制到 pom.xml 中的 <dependencies> 中:

    这样,Maven 就会开始自动下载 jar 包到本地仓库,然后关联到你的项目中,下载完成后,我们展开工程目录中 External Libraries:

    可以发现,虽然我们只写了一个依赖,但是它导入了两个jar包,也就是说,导入某个jar包时,与它密切相关的 jar 包也会同时被导入进来。

    除了 spring-core,我还要 spring-context,复制 spring-core 的 <dependency>,将 spring-core 改为 spring-context,如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

    下载完成后,查看External Libraries,会不会发现,瞬间导入了好多jar包(当然不是瞬间,这得看你的网速了)呢:

    这就是 Maven 的强大之处,如果你需要使用 testWeb 开发网站的话,只需记住几个重要的包的名字,就可以轻松将所有包导入项目中。

    长话短说,现在我们要进行 testWeb 的开发,请把你的 pom.xml 变成下面的样子,当然不要改你的 grupId 等信息(从modelVersion 到 url 都不要动):

(1) 添加公用版本信息(可以不添加,直接将版本写入即可)

<properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
</properties>

(2)接着,请在<dependencies>中加入以下依赖:

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

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>

将<build>改成如下形式:

<build>
     <finalName>springmvcdemo</finalName>
     <plugins>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>1.8</source>   <!-- 此处的 1.8 指的是 JDK 的版本,目前一般为 1.7 或 1.8 -->
                   <target>1.8</target>
               </configuration>
          </plugin>
     </plugins>
</build>

我的 完整的 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.example</groupId>
  <artifactId>testWeb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>testWeb Maven Webapp</name>
  <url>http://maven.apache.org</url>

    <properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>testWeb</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
完整的 pom.xml 文件

我们可以发现,除了导入了spring相关jar包,还有一些其他的包,这些包都是有作用的,我们后面慢慢说。如果不使用Maven请自行下载spring、hibernate、mysql、jstl等相关jar包然后导入到工程中。至此,jar包的导入就完成了

此处补充下 Maven 快速排查依赖包冲突

(1)如下图,点击 箭头所指按钮

  • 出现左边的项目依赖结构图,通过此图我们可以很好的观察项目的依赖依赖情况。
  • 如下标注1 所示,我们可以直接在依赖结构图上编辑依赖,常用的就是此排除功能。

 (2)如下图所描述,一般我们出现红色线的时候是都要进行排除的,防止出现因为版本不同的依赖包造成无法编译。

(另开一文,见Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring

原文地址:https://www.cnblogs.com/ostrich-sunshine/p/7070747.html