這篇很長(zhǎng)!
maven多模塊開發(fā)是基于網(wǎng)上一篇文章介紹學(xué)習(xí)而來的,為了防止他的鏈接以后掛了,所以現(xiàn)在復(fù)制其內(nèi)容過來,原文地址:
http://blog.csdn.net/williamhappy/article/details/54376855
下面內(nèi)容我會(huì)在原文基礎(chǔ)上進(jìn)行修改
一. 項(xiàng)目工程目錄
首先展示一下赘艳,最終整個(gè)項(xiàng)目的工程目錄:
簡(jiǎn)單介紹一下目錄結(jié)構(gòu):
common-parent
為所有項(xiàng)目的父項(xiàng)目悔橄,主要用來管理所有項(xiàng)目使用的jar包及其版本双霍。
common-utils
為公共的工具類項(xiàng)目攘已,繼承父項(xiàng)目坠七,它會(huì)被打成jar包供其它項(xiàng)目使用。
taotao-manager
為我們自己的項(xiàng)目莹妒,繼承與我們的父項(xiàng)目赶站。
taotao-manager-pojo
為我們自己項(xiàng)目的一個(gè)子模塊,依賴與taotao-manager,打成jar包
taotao-manager-mapper
為我們自己項(xiàng)目的一個(gè)子模塊产喉,依賴與taotao-manager-pojo,打成jar包
taotao-manager-service
為我們自己項(xiàng)目的一個(gè)子模塊捂掰,依賴與taotao-manager-mapper,打成jar包
taotao-manager-web
為我們自己項(xiàng)目的一個(gè)子模塊,依賴與taotao-manager-service,打成war包
二. 創(chuàng)建父工程
下面為具體操作:
1. 首先打開IntelliJ IDEA镊叁,按下面步驟來:
或者第一次打開IDEA尘颓,
2. 來到創(chuàng)建目錄,選擇Empty project晦譬,next
3. 來到New Project頁面疤苹,填寫project name,選擇Project location敛腌,點(diǎn)Finish
等待IDEA加載完成卧土,進(jìn)行下一步
4. 選擇File–>New–>Module,進(jìn)入New Module頁面:
5. 在New Module頁面,按如下步驟操作:
對(duì)于我自己來說,我只在創(chuàng)建web模塊的時(shí)候使用了web模板,其他均未使用模板,其它模板暫未嘗試
6. 填寫組織名稱和項(xiàng)目名稱像樊,以及版本號(hào)
7. 配置本地maven目錄及maven倉(cāng)庫(kù)配置文件
8. 創(chuàng)建父工程最后一步尤莺,給Module取名,及選擇工作目錄生棍,選擇完成
等待生成pom文件颤霎,注意修改打包方式為pom,修改pom文件如下:(由于pom文件較長(zhǎng)涂滴,只給出部分友酱,獲取所有,請(qǐng)關(guān)注github)
<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>cn.william</groupId>
<artifactId>common-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging><!--修改打包方式-->
<name>common-parent</name>
<url>http://maven.apache.org</url>
<!--集中定義依賴版本號(hào)-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
...(省略)
</properties>
<dependencyManagement>
<dependencies>
<!-- 時(shí)間操作組件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
...(省略)
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 資源文件拷貝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
三. 創(chuàng)建公共工具類
首先柔纵,公共工具類是繼承自父項(xiàng)目common-parent的缔杉。
需要注意的一點(diǎn)是一點(diǎn),為了項(xiàng)目看起來為分模塊的形式(類似在eclipse中開發(fā))搁料,在創(chuàng)建common-utils中有一步需要注意:
下一步特別注意或详,這一步會(huì)影響目錄結(jié)構(gòu)系羞,
同樣注意項(xiàng)目的打包方式為jar,和父項(xiàng)目有所不同霸琴。
<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">
<parent>
<artifactId>common-parent</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../common-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-utils</artifactId>
<packaging>jar</packaging><!-- 打成jar包 -->
<name>common-utils</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- jar包的依賴 -->
<dependencies>
<!-- 時(shí)間操作組件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
...(省略)
</dependencies>
</project>
三. 創(chuàng)建開發(fā)項(xiàng)目
創(chuàng)建開發(fā)項(xiàng)目taotao-manager椒振,其創(chuàng)建步驟同上,同樣是繼承common-parent,同樣修改其pom文件沈贝,詳細(xì)如下:
<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">
<parent>
<artifactId>common-parent</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../common-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>taotao-manager</artifactId>
<packaging>pom</packaging>
<name>taotao-manager</name>
<url>http://maven.apache.org</url>
<modules>
<module>taotao-manager-pojo</module>
<module>taotao-manager-mapper</module>
<module>taotao-manager-service</module>
<module>taotao-manager-web</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依賴管理 -->
<dependencies>
<dependency>
<groupId>cn.william</groupId>
<artifactId>common-utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
四. 創(chuàng)建開發(fā)項(xiàng)目子模塊
創(chuàng)建taotao-manager-pojo杠人,mapper勋乾,service宋下,web等子模塊,詳細(xì)如下:
-
右鍵點(diǎn)擊taotao-manager辑莫,選擇New学歧,Module,
createSon1createSon2這一步注意各吨,與創(chuàng)建common-utils時(shí)不同枝笨,是將其子模塊添加到taotao-manager目錄下的:
createSon3maven的相關(guān)配置,保持默認(rèn):
createSon4注意子模塊所在目錄就好:
createSon5 -
創(chuàng)建taotao-manager下其它子模塊
上面說的時(shí)創(chuàng)建taotao-manager-pojo子模塊揭蜒,另外三個(gè)子模塊的創(chuàng)建方式與其類似横浑,有一點(diǎn)不同時(shí),在創(chuàng)建taotao-manager-web子模塊時(shí)屉更,maven項(xiàng)目的類型選擇如下:
createSon6 修改子模塊的pom文件
子模塊pojo徙融,mapper,service的打包方式全為jar瑰谜,只有web子模塊打包為war包欺冀。
pojo子模塊,pom.xml詳細(xì)如下:
<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">
<parent>
<artifactId>taotao-manager</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>taotao-manager-pojo</artifactId>
<packaging>jar</packaging>
<name>taotao-manager-pojo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
mapper子模塊依賴與pojo子模塊萨脑,pom.xml詳細(xì)如下:
<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">
<parent>
<artifactId>taotao-manager</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>taotao-manager-mapper</artifactId>
<packaging>jar</packaging>
<name>taotao-manager-mapper</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 依賴與pojo子模塊 -->
<dependency>
<groupId>cn.william</groupId>
<artifactId>taotao-manager-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
</project>
service子模塊依賴與mapper子模塊隐轩,pom.xml詳細(xì)如下:
<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">
<parent>
<artifactId>taotao-manager</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>taotao-manager-service</artifactId>
<packaging>jar</packaging>
<name>taotao-manager-service</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 依賴與mapper子模塊 -->
<dependency>
<groupId>cn.william</groupId>
<artifactId>taotao-manager-mapper</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
...(省略)
</dependencies>
</project>
web子模塊依賴與service子模塊,pom.xml詳細(xì)如下:
<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">
<parent>
<artifactId>taotao-manager</artifactId>
<groupId>cn.william</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>taotao-manager-web</artifactId>
<packaging>war</packaging><!--打成war包-->
<name>taotao-manager-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- 依賴于service -->
<dependency>
<groupId>cn.william</groupId>
<artifactId>taotao-manager-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
...(省略)
</dependencies>
<build>
<finalName>taotao-manager-web</finalName>
</build>
</project>
五. 運(yùn)行項(xiàng)目
-
創(chuàng)建index.jsp
至此渤早,項(xiàng)目創(chuàng)建已經(jīng)完成职车,我們可以在taotao-manager-web的webapp目錄下創(chuàng)建index.jsp,詳情如下:
createIndex 使用tomcat插件
我們使用maven的tomcat插件來運(yùn)行項(xiàng)目,在此之前鹊杖,確保在taotao-manager的pom文件中配置了tomcat的插件:
...(省略)
<build>
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
...(省略)
- 配置Maven Tomcat Plugin運(yùn)行web項(xiàng)目
(1) 添加新配置
注意這里運(yùn)行項(xiàng)目的目錄是manager目錄, tomcat命令是clean tomcat7:run 必須要在配置了tomcat插件后才能使用
(2) 點(diǎn)擊運(yùn)行悴灵,或者點(diǎn)擊旁邊的debug
(3) 出項(xiàng)錯(cuò)誤
出現(xiàn)錯(cuò)誤,可能是common-parent和common-utils沒有安裝到本地倉(cāng)庫(kù)仅淑,出現(xiàn)的錯(cuò)誤是找不到common-utils的jar包称勋,那就需要我們安裝一下。
等待將jar包安裝到本地倉(cāng)庫(kù)涯竟,稍微有點(diǎn)慢可能赡鲜,耐心等空厌。。银酬。
安裝完成之后嘲更,再次運(yùn)行,出現(xiàn)下面的信息揩瞪,證明運(yùn)行成功:
通過瀏覽器訪問:
至此赋朦,我們的項(xiàng)目環(huán)境搭建成功,接下來就是實(shí)際的項(xiàng)目開發(fā)了李破。
這只是完成了第一步,接下來我們開始搭建ssm框架
ssm框架搭建pom源碼過多,我只在此講幾個(gè)我遇到的問題
1.common依賴的是脫離于業(yè)務(wù)框架的三方j(luò)ar包,controller在return 對(duì)象時(shí)如果報(bào)了
HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class cn.e3mall.pojo.TbItem問題時(shí):
注意將三方依賴導(dǎo)入
而且!注意將common的jar包重新安裝到本地倉(cāng)庫(kù)!
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2.mapper層配置的是包掃描,如果遇到引用報(bào)紅,沒關(guān)系!,大膽用就是了
但是,使用完之后可能會(huì)報(bào)一個(gè)錯(cuò)誤,就是
HTTP Status 500 - Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.e3mall.mapper.TbItemMapper.selectByPrimaryKey
這是因?yàn)樵诖虬臅r(shí)候,maven會(huì)忽略掉mapper.xml文件,只打包接口,導(dǎo)致找不到映射,解決方法是在dao層的pom里添加
<!--如果不添加此節(jié)點(diǎn)mybatis的mapper.xml文件都會(huì)被漏掉宠哄。 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
然后重新編譯一下即可
3.找不到DataSource的bean
由于我dao層和trans層是兩個(gè)spring配置文件的
導(dǎo)致,我之前在配置的時(shí)候,事物層引用不到dao層注入的DataSource,我當(dāng)時(shí)用了個(gè)import引進(jìn)來
但是后來莫名其妙又好了的,不知道什么原因
如果有時(shí)間,我會(huì)慢慢寫一下ssm的導(dǎo)入步驟
最后,展示一下成功的例子,嘿嘿