1. 前言:
maven 的安装、配置等知识其他博客已经写得很完善了,这里只介绍一下作为一个菜鸟的我放开始学 maven 并 用 Maven 构建 Spring 项目的小 demo 及我遇到的一些小错误。
2. Maven的pom文件
因为Maven是基于项目对象模型(Project Object Model,POM)的概念运作的,所以Maven的项目都有一个pom.xml文件用来管理项目的依赖以及项目的编译等功能。
2.1 dependencies元素
<dependencies>
</dependencies>
此元素包含项目需要依赖使用的多个<dependency></dependency>
。
2.2 dependency元素
<dependency></dependency>
内部通过groupId、artifactId、version确定唯一的依赖,可以称这3个为坐标。
groupId:组织的唯一标识。
artifactId:项目的唯一标识。
version:项目的版本。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
2.3 properties元素
<dependency> </dependency>
可以定义变量在dependency中引用,代码如下所示:
<properties>
<java.version>1.8</java.version>
<spring-framework.version>4.3.18.RELEASE</spring-framework.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
2.4 编译插件
Maven提供了编译插件,可在编译插件中设置Java的编译级别,代码如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
3 IDEA 新建一个 Spring 项目,后续转为Maven项目(新建项目时不是Maven项目)。
3.1 IDEA 新建 spring 项目
File ----> New ----> Project -----> spring ----> 两个地方打勾,看图片 ----> Next ----> 填 Project Name -----> 选 Project Location -----> Finish
项目结构:
项目建好之后在 WEB-INF 下新建一个 lib 文件夹 (Dictionary),将 Spring 的 几个基础包复制到 lib 目录中,并发布到类路径下。
我用的相关 jar 包:
链接:https://pan.baidu.com/s/11w-wLbXeRK5s_4eU87EHmw
提取码:4ffo
IDEA 发布包到类路径下:选中要发布的包名 -----> 右键 ----> Add as Library
3.2 写相应代码输出 “Hello World!”
(1)src 右键----> 新建一个包(package)----> 填入包名:learn.spring.demo ----> ok
(2) 在 learn.spring.demo 包下创建一个借口 UserDao,然后在接口中定义一个 say() 方法。
package learn.spring.demo;
public interface UserDao {
public void say();
}
(3)在 learn.spring.demo 包下创建 UserDao 接口的实现类 UserDaoImpl,该类需要实现接口中的 say() 方法,并在方法中编写一条输出语句。
package learn.spring.demo;
public class UserDaoImpl implements UserDao {
public void say(){
System.out.println("userDao say hello World!");
}
}
(4)在 src 下创建 Spring 的配置文件 applicationContext.xml, 并在配置文件中创建一个 id 为 userDao 的 Bean 。
src ----> 右键 -----> New ----> Xml Configuration file ----> spring config -----> 输入配置文件名字:applicationContext -----> ok
applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 将指定类配置给 Spring, 让 Spring 创建其对象的实例 -->
<bean id="userDao" class="learn.spring.demo.UserDaoImpl" />
</beans>
(5)在 learn.spring.demo 包下,创建测试类 TestIoc,并在类中编写 main()方法。代码如下:
package learn.spring.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc {
public static void main(String [] args){
//1. 初始化 spring 容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2. 通过容器获取 userDao 实例
UserDao userDao = (UserDao)applicationContext.getBean("userDao");
//3. 调用实例中的方法
userDao.say();
}
}
执行程序控制台输出:
项目结构:
3.3 转为Maven项目
(1)把 lib 下面的 jar 删除。
(2)项目右键 ----> Add Framework Support ----> maven -----> ok。
(3) 把配置文件 applicationContext.xml 移到 resource 下面。
(4)把 pom.xml 中 改成自己的。
(5)配置 pom.xml 文件,把 原本 lib 目录中的 jar 包配置到 pom.xml 中,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>SpringMaven02</groupId>
<artifactId>SpringMaven02</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!--<dependency>
<groupId>org.apache</groupId>
<artifactId>commons-logging</artifactId>
<version></version>
</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
修改完 pom.xml 文件后,右下角有一个弹窗,选择 Import Changes,稍等一下,maven 会自动下载项目所依赖的 jar 包
(6)运行 TestIoc 类中的 main()方法,控制台输出:
项目结构:
4 IDEA 新建一个 Spring 项目 ( maven 项目)
(1)File ----> New ----> Project -----> maven ----> Next ----> 填 GroupId -----> 填 ArtifactId ----> Next ----> 选择 Project Location ----> Finish
(2)在 src 下新建 learn.spring.demo 包,并把上面的 UserDao类、UserDaoImpl 类 和 TestIoc类复制到 该包下面;
(3)把 applicationContext.xml 复制到 resource 目录下面;
(4)把 上面 pom.xml 中的配置复制到本项目中的 pom.xml 中;
(5)配置 pom.xml 文件,把 原本 lib 目录中的 jar 包配置到 pom.xml 中,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>spring.maven</groupId>
<artifactId>demo1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!--<dependency>
<groupId>org.apache</groupId>
<artifactId>commons-logging</artifactId>
<version></version>
</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
修改完 pom.xml 文件后,右下角有一个弹窗,选择 Import Changes,稍等一下,maven 会自动下载项目所依赖的 jar 包
(5)运行 TestIoc 类中的 main()方法,控制台输出:
项目结构:
5 错误总结
5.1 groupId、artifactId、version 这三个东西一定要对,要不然 maven 找不到要需要的东西,我就是把 <version> </version> 弄错了,导致一直不成功。
错误:<version>4.3.6</version>
正确:<version>4.3.6.RELEASE</version>
5.2 pom.xm 文件该正确了以后没去点 IDEA 右下角的 Import Changes , Maven 没有那个智能,你改好了它自动下载,得点击一下去触发下载或寻找。
修改完 pom.xml 文件后,右下角有一个弹窗,选择 Import Changes,稍等一下,maven 会自动下载项目所依赖的 jar 包
项目源码(github 地址):点击我下载源码,只有后面这个项目