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

时间:2022-12-31 12:06:50

参考: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。

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

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

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

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

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

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

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

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

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

说明:(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可能会等待很长一段实践。

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

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

(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,或点击如下:查看项目结构

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

出现如下图:

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

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

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

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

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

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.</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.</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.</version>
<scope>test</scope>
</dependency>

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

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

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

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

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

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

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

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

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

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

可以发现,虽然我们只写了一个依赖,但是它导入了两个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..RELEASE</version>
</dependency>

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

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

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

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

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

<properties>
<spring.version>4.3..RELEASE</spring.version>
<hibernate.version>5.2..Final</hibernate.version>
</properties>

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

        <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.</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..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.</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.</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..RELEASE</spring.version>
<hibernate.version>5.2..Final</hibernate.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.</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..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.</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 所示,我们可以直接在依赖结构图上编辑依赖,常用的就是此排除功能。

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

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

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

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

Java EE 学习(5):IDEA + maven + spring 搭建 web(1)的更多相关文章

  1. Java EE 学习(9):IDEA &plus; maven &plus; spring 搭建 web(5)- 博客文章管理

    转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...

  2. Java EE 学习(8):IDEA &plus; maven &plus; spring 搭建 web(4)- 用户管理

    转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...

  3. Java EE 学习(7):IDEA &plus; maven &plus; spring 搭建 web(3)- 配置数据库

    参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 ...

  4. Java EE 学习(6):IDEA &plus; maven &plus; spring 搭建 web(2)- 配置 Spring

    参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...

  5. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

  6. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  7. 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】

    一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...

  8. 【Java EE 学习 50】【Spring学习第二天】【使用注解的DI实现】【spring中的继承】【动态代理伪hibernate实现】

    一.使用注解的DI实现 1.@Resource 使用该注解能够实现引用型属性的DI实现,该注解能够根据属性名和属性类型自动给属性赋值.一般使用@Resource(name="student& ...

  9. Java EE 学习(4):IDEA &plus; maven 搭建 web(2)

    参考:http://www.bubuko.com/infodetail-1855067.html 现使用 Maven 创建项目:本节接Java EE 学习(3):IDEA + maven 搭建 web ...

随机推荐

  1. 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用

    因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码  https ...

  2. MVP架构。。。。

    Model-View-Presenter(MVP)概述    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...

  3. python 之变量

    什么是变量? 变量就是存储一个不固定的值,可以随时更改其值. 1.变量不仅可以是数字,还可以是任意数据类型 2.变量名必须是大小写英文.数字和_的组合,且不能用数字开头 python变量如何存储 首先 ...

  4. 关于Atlassian无法注册的问题,请看过来

    好多童鞋在用团队构建工具git的时候,必然用到git的可视化工具sourceTree来管理项目一些操作,那么当我们下载完sourTree的时候,会有一个选择,已有账户登录还是免费账户,免费账户只有三十 ...

  5. 搭建 vue2 单元测试环境&lpar;karma&plus;mocha&plus;webpack3&rpar;

    从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...

  6. 通过spring抽象路由数据源&plus;MyBatis拦截器实现数据库自动读写分离

    前言 之前使用的读写分离的方案是在mybatis中配置两个数据源,然后生成两个不同的SqlSessionTemplate然后手动去识别执行sql语句是操作主库还是从库.如下图所示: 好处是,你可以人为 ...

  7. cocos2d-js 安卓自定义本地通知功能

    安卓新手,笔记有理解不当的地方望指出,经过几天折腾终于可以实现类似ios的本地通知功能(ios就几行代码),可能有第三方sdk可以方便实现,暂时没去找 思路: 1. startService 和bin ...

  8. C&num; Linq 学习笔记

    刚刚学习了 Siki老师 的C#教程Linq部分,以下是笔记 需要引用命名空间 using System.Linq; 然后我们需要准备数据 武林高手类 /// <summary> /// ...

  9. Project Euler:Problem 76 Counting summations

    It is possible to write five as a sum in exactly six different ways: 4 + 1 3 + 2 3 + 1 + 1 2 + 2 + 1 ...

  10. 浅谈AngularJS的&dollar;parse服务

    $parse 作用:将一个AngularJS表达式转换成一个函数 Usage$parse(expression) arguments expression:需要被编译的AngularJS语句 retu ...