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 地址):點擊我下載源碼,只有後面這個項目