最近剛入職,發現公司都是使用eclipse,之前一直在學校一直使用netbeans集成開發環境,對eclipse不是太熟悉,自己也不太喜歡使用myeclipse收費的軟件(雖然可以盜版激活),反應慢也是myeclipse被人詬病的原因,決定花一天時間來自己動手搭建eclipse+maven+spring。
准備工作:
1.下載eclipse(Eclipse Java EE IDE for Web Developers,Version: Juno Service Release 2)。
2.下載maven3.3.3。
3.安裝maven插件()。
注意事項:maven3.3.3支持jdk1.7,maven3.2.5僅僅支持到1.6。
第一步:新建maven項目,選擇Maven Project,如圖1。
第二步:配置轉換項目為spring項目。
首先右擊項目,點擊Properties,選擇左邊的java build path,我們先把出問題的刪除,如果不刪除,后面在新建source file時無法新建,如圖,選擇remove就行了。
新建src/main/java、src/test/java/、src/test/resources,如圖,提示:如果你eclipse是選擇java模式,可以直接新建source file,j2ee模式可以切換到java模式。
修改jdk版本,如果此版本不修改,會造成maven與jdk不兼容,導致編譯出問題,右擊JRE System Library[J2SE-1.5] 修改問1.7,如圖。
你可以調整source folder的順序,根據自己的喜好,我不知道有什么影響,看到有的教程上有調整的,如果你有強迫症,可以修改一下順序,如圖。
下面,我們解決最重要的一個步驟,spring項目的雛形就在這里顯現, 把項目轉化為web項目,先找到位置,如圖。
點擊Convert to faceted form... (注釋:有的教程修改Further configuration available...,其實一般默認就可以,不用可以修改,我的eclipse就選的默認的,沒修改),在右邊選擇你項目運行的應用服務器,我選的是tomcat 7.0,你選的maven 和tomcat與你的jdk有很的關系,現在雖然8出來了,單是選擇1.7較為穩定,只是建議,根據個人喜好。
現在就轉化為了web項目,我們在配置其他的東西,完成整個項目 。
現在的目錄結構為這種情況,如圖:
第三步:轉化為spring項目,添加applicationContext.xml、simple-servlet.xml,配置spring文件,配置spring引用包即確定引用文件pom.xml。
applicationContext.xml 、demo-servlet.xml、web.xml為spring配置文件,demo-servlet.xml為配置轉發器,主要作用與view層,applicationContext.xml主要配置數據庫與事務,在這里不過多講解,單是這兩個文件一定要搞清楚怎么配置,每個配置模塊什么意思,不求甚解會害慘自己,出個問題,找不到原因,我就曾經在這個地方吃過虧。對於pom.xml文件,我建議大家整理出一個自己需要的版本,之前大家不使用maven的時候,都是整理自己一個完整的lib包,maven的作用就是替大家管理引用文件,pom.xml文件就是配置需要引入的包,你項目依賴哪些包,就在這些pom.xml文件里引用,maven會幫你下載。下面依次列出每個文件的內容。
demo-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:p ="http://www.springframework.org/schema/p"
xmlns:context ="http://www.springframework.org/schema/context"
xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx"
xmlns:mvc ="http://www.springframework.org/schema/mvc"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" >
< bean class ="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
< context:component-scan base-package ="com.demo.controller" />
< mvc:annotation-driven />
< bean id ="viewResolver"
class ="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix ="/WEB-INF/jsp/" p:suffix =".jsp" />
</ beans >
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"
xmlns:p
="http://www.springframework.org/schema/p"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
>
<
context:component-scan
base-package
="com.demo"
/>
<
bean
id
="dataSource"
class
="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName
="com.mysql.jdbc.Driver"
p:url
="jdbc:mysql://XXX.XXX.130.XXX:3306/anhe?useUnicode=true&characterEncoding=UTF-8"
p:username
="root"
p:password
="XXXXXX"
/>
<!--
配置Jdbc模板
-->
<
bean
id
="jdbcTemplate"
class
="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref
="dataSource"
/>
<!--
配置事務管理器
-->
<
bean
id
="transactionManager"
class
="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref
="dataSource"
/>
<!--
通過AOP配置提供事務增強,讓service包下所有Bean的所有方法擁有事務
-->
<
aop:config
proxy-target-class
="true"
>
<
aop:pointcut
id
="serviceMethod"
expression
=" execution(* com.baobaotao.service..*(..))"
/>
<
aop:advisor
pointcut-ref
="serviceMethod"
advice-ref
="txAdvice"
/>
</
aop:config
>
<
tx:advice
id
="txAdvice"
transaction-manager
="transactionManager"
>
<
tx:attributes
>
<
tx:method
name
="*"
/>
</
tx:attributes
>
</
tx:advice
>
</
beans
>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:p ="http://www.springframework.org/schema/p"
xmlns:context ="http://www.springframework.org/schema/context"
xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" >
< context:component-scan base-package ="com.demo" />
< bean id ="dataSource"
class ="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName ="com.mysql.jdbc.Driver"
p:url ="jdbc:mysql://XXX.XXX.130.XXX:3306/anhe?useUnicode=true&characterEncoding=UTF-8"
p:username ="root" p:password ="XXXXXX" />
<!-- 配置Jdbc模板 -->
< bean id ="jdbcTemplate" class ="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref ="dataSource" />
<!-- 配置事務管理器 -->
< bean id ="transactionManager"
class ="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref ="dataSource" />
<!-- 通過AOP配置提供事務增強,讓service包下所有Bean的所有方法擁有事務 -->
< aop:config proxy-target-class ="true" >
< aop:pointcut id ="serviceMethod"
expression =" execution(* com.baobaotao.service..*(..))" />
< aop:advisor pointcut-ref ="serviceMethod" advice-ref ="txAdvice" />
</ aop:config >
< tx:advice id ="txAdvice" transaction-manager ="transactionManager" >
< tx:attributes >
< tx:method name ="*" />
</ tx:attributes >
</ tx:advice >
</ beans >
web.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >
< filter >
< filter-name >CharacterEncoding </ filter-name >
< filter-class >org.springframework.web.filter.CharacterEncodingFilter </ filter-class >
< init-param >
< param-name >encoding </ param-name >
< param-value >UTF-8 </ param-value >
</ init-param >
< init-param >
< param-name >forceEncoding </ param-name >
< param-value >true </ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name >CharacterEncoding </ filter-name >
< url-pattern >/* </ url-pattern >
</ filter-mapping >
< context-param >
< param-name >contextConfigLocation </ param-name >
< param-value >/WEB-INF/applicationContext.xml </ param-value >
</ context-param >
< listener >
< listener-class >org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name >demo </ servlet-name >
< servlet-class >org.springframework.web.servlet.DispatcherServlet </ servlet-class >
< load-on-startup >2 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name >demo </ servlet-name >
< url-pattern >*.do </ url-pattern >
</ servlet-mapping >
< session-config >
< session-timeout >
30
</ session-timeout >
</ session-config >
< welcome-file-list >
< welcome-file >/WEB-INF/jsp/index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
pom.xml文件
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 >smart </ groupId >
< artifactId >demo </ artifactId >
< packaging >war </ packaging >
< version >0.0.1-SNAPSHOT </ version >
< name >demo Maven Webapp </ name >
< url >http://maven.apache.org </ url >
< repositories >
< repository >
< id >com.springsource.repository.bundles.release </ id >
< name >EBR Spring Release Repository </ name >
< url >http:// repository.springsource.com/maven/bundles/release </ url >
</ repository >
< repository >
< id >com.springsource.repository.bundles.external </ id >
< name >EBR External Release Repository </ name >
< url >http:// repository.springsource.com/maven/bundles/external </ url >
</ repository >
</ repositories >
< properties >
< org.springframework.version >3.0.5.RELEASE </ org.springframework.version >
</ properties >
<!-- Core utilities used by other modules. Define this if you use Spring
Utility APIs (org.springframework.core.*/org.springframework.util.*) -->
< dependencies >
< dependency >
< groupId >org.aspectj </ groupId >
< artifactId >aspectjweaver </ artifactId >
< version >1.6.12 </ version >
</ dependency >
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-core </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Expression Language (depends on spring-core) Define this if you use
Spring Expression APIs (org.springframework.expression.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-expression </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define
this if you use Spring Bean APIs (org.springframework.beans.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-beans </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core,
spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-aop </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Application Context (depends on spring-core, spring-expression, spring-aop,
spring-beans) This is the central artifact for Spring's Dependency Injection
Container and is generally always defined -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-context </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Various Application Context utilities, including EhCache, JavaMail,
Quartz, and Freemarker integration Define this if you need any of these integrations -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-context-support </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Transaction Management Abstraction (depends on spring-core, spring-beans,
spring-aop, spring-context) Define this if you use Spring Transactions or
DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-tx </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- JDBC Data Access Library (depends on spring-core, spring-beans, spring-context,
spring-tx) Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-jdbc </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA,
and iBatis. (depends on spring-core, spring-beans, spring-context, spring-tx)
Define this if you need ORM (org.springframework.orm.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-orm </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Object-to-XML Mapping (OXM) abstraction and integration with JAXB,
JiBX, Castor, XStream, and XML Beans. (depends on spring-core, spring-beans,
spring-context) Define this if you need OXM (org.springframework.oxm.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-oxm </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Web application development utilities applicable to both Servlet and
Portlet Environments (depends on spring-core, spring-beans, spring-context)
Define this if you use Spring MVC, or wish to use Struts, JSF, or another
web framework with Spring (org.springframework.web.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-web </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Spring MVC for Servlet Environments (depends on spring-core, spring-beans,
spring-context, spring-web) Define this if you use Spring MVC with a Servlet
Container such as Apache Tomcat (org.springframework.web.servlet.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-webmvc </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Spring MVC for Portlet Environments (depends on spring-core, spring-beans,
spring-context, spring-web) Define this if you use Spring MVC with a Portlet
Container (org.springframework.web.portlet.*) -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-webmvc-portlet </ artifactId >
< version >${org.springframework.version} </ version >
</ dependency >
<!-- Support for testing Spring applications with tools such as JUnit and
TestNG This artifact is generally always defined with a 'test' scope for
the integration testing framework and unit testing stubs -->
< dependency >
< groupId >org.springframework </ groupId >
< artifactId >spring-test </ artifactId >
< version >${org.springframework.version} </ version >
< scope >test </ scope >
</ dependency >
< dependency >
< groupId >mysql </ groupId >
< artifactId >mysql-connector-java </ artifactId >
< version >5.1.36 </ version >
</ dependency >
</ dependencies >
< build >
< finalName >demo </ finalName >
</ build ></ project >
配置一下項目依賴關系,如圖,remove右邊紅色框里面的內容,部署不需要把test文件部署上去,是不是???毋庸置疑。

再Add如下文件,如圖:

不知道你們發現嗎?現在項目還是紅叉+s,那是因為我們還有一個地方沒有修改,如圖:

當我們配置好之后,項目又有可能自動改回來,看看之前是不是我們選擇過jdk版本,但是現在又改了一次,那是因為還有個地方搗鬼,我當時就吃虧到到這個地方,浪費了好幾十分鍾思考,結果還是不如谷歌,哦,又想起一點,谷歌不是被封了,用這個"谷粉http://www.jwss.com/" ,也是谷歌的引擎。修改下圖配置,java編譯器:

此刻,我們神奇的發現,是不是在maven依賴包里出現了如下美好畫面:

至此,項目配置文件搞定,下面我們添加示例代碼演示maven神奇之處。
第五步:測試項目。我們只寫一個攔截器,來測試一下。
新建一個jsp文件夾,如圖:

在controller報中,我們新建一個java類HomeController,添加如下代碼:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.demo.dao.HomeServcies;
@Controller
public class HomeController {
@Autowired
HomeServcies homeServcies;
@RequestMapping(value = "index")
public String Index() {
return "/jsp/index";
}
}
測試運行:
出現神奇的,如圖:

到此,結束了。
剛來北京,沒有錢,只能擼代碼玩了。