1. 程式人生 > >SSH專案實戰OA-使用maven搭建工程

SSH專案實戰OA-使用maven搭建工程

SSH專案實戰OA-使用maven搭建工程

這裡,我統一規範一下OA專案的開發工具和環境,如下:

開發工具和環境

Eclipse

Maven

Tomcat-8.0.30

JDK 1.8

MySQL 5.5

後臺工程搭建:

Maven常見的打包方式有:

jar

jar工程,很顯然就是pom工程的子工程,由pom工程來管理。

war

war工程是一個web工程,是可以直接放到tomcat下執行的工程。

pom

pom工程一般都是父工程,管理jar包的版本、maven外掛的版本、統一的依賴管理,它是一個聚合工程。其實說白了它只有一個pom.xml檔案,一般是作為父工程出現的,只是定義了一些依賴、外掛、還有一些版本號等等。

工程之間的依賴關係如下:

搭建OA-parent工程

在pom.xml中鎖定jar包的版本,注意的是,在pom.xml中僅僅是鎖定了jar包的版本,但是沒用真正的添加了jar包的依賴,這樣是為了當OA-parent的子模組不用匯入一些模組並不需要的jar包,但又可以使不同模組之中的相同jar包鎖定在同一版本,不會發生因版本不同而發生衝突

<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>com.QEcode</groupId>
  <artifactId>OA-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <!-- 集中定義依賴版本號 -->
	<properties>
		<spring.version>4.2.4.RELEASE</spring.version>
		<hibernate.version>5.0.7.Final</hibernate.version>
		<struts.version>2.3.24</struts.version>
		<junit.version>4.12</junit.version>
		<mysql.version>5.1.32</mysql.version>
        <slf4j.version>1.6.4</slf4j.version>
        <jackson.version>2.4.2</jackson.version>
        <druid.version>1.0.9</druid.version>
        <httpclient.version>4.3.5</httpclient.version>
        <jstl.version>1.2</jstl.version>
        <servlet-api.version>2.5</servlet-api.version>
        <jsp-api.version>2.0</jsp-api.version>
        <joda-time.version>2.5</joda-time.version>
        <commons-lang3.version>3.3.2</commons-lang3.version>
        <commons-io.version>1.3.2</commons-io.version>
        <commons-net.version>3.3</commons-net.version>
        <jsqlparser.version>0.9.1</jsqlparser.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <jedis.version>2.7.2</jedis.version>
        <solrj.version>4.10.3</solrj.version>
        <dubbo.version>2.5.3</dubbo.version>
        <zookeeper.version>3.4.7</zookeeper.version>
        <zkclient.version>0.1</zkclient.version>
        <activemq.version>5.11.2</activemq.version>
        <freemarker.version>2.3.23</freemarker.version>
        <quartz.version>2.2.2</quartz.version>
	</properties>

	<!-- 鎖定版本 -->
	<dependencyManagement>
		<dependencies>
			<!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-orm</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-test</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-web</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<!-- hibernate -->
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>${hibernate.version}</version>
			</dependency>
			<!-- struts2 -->
			<dependency>
				<groupId>org.apache.struts</groupId>
				<artifactId>struts2-core</artifactId>
				<version>${struts.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.struts</groupId>
				<artifactId>struts2-spring-plugin</artifactId>
				<version>${struts.version}</version>
			</dependency>
			<!-- 時間操作元件 -->          
           <dependency>
               <groupId>joda-time</groupId>
               <artifactId>joda-time</artifactId>
               <version>${joda-time.version}</version>
           </dependency>
           <!-- Apache工具元件 -->
           <dependency>
               <groupId>org.apache.commons</groupId>
               <artifactId>commons-lang3</artifactId>
               <version>${commons-lang3.version}</version>
           </dependency>
           <dependency>     
               <groupId>org.apache.commons</groupId>
               <artifactId>commons-io</artifactId>
               <version>${commons-io.version}</version>
           </dependency>
           <dependency>         
               <groupId>commons-net</groupId>
               <artifactId>commons-net</artifactId>
               <version>${commons-net.version}</version>
           </dependency>
           <!-- Jackson Json處理工具包 -->
           <dependency>
               <groupId>com.fasterxml.jackson.core</groupId>
               <artifactId>jackson-databind</artifactId>
               <version>${jackson.version}</version>
           </dependency>
           <!-- quartz任務排程框架 -->
           <dependency>
               <groupId>org.quartz-scheduler</groupId>
               <artifactId>quartz</artifactId>
               <version>${quartz.version}</version>
           </dependency>
           <!-- 單元測試 -->
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>${junit.version}</version>
               <scope>test</scope>
           </dependency>
           <!-- 日誌處理 -->
           <dependency>
               <groupId>org.slf4j</groupId>
               <artifactId>slf4j-log4j12</artifactId>
               <version>${slf4j.version}</version>
           </dependency>
		<!-- MySql -->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>${mysql.version}</version>
           </dependency>
           <!-- 連線池 -->
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid</artifactId>
               <version>${druid.version}</version>
           </dependency>
           <!-- JSP相關 -->
           <dependency>
               <groupId>jstl</groupId>
               <artifactId>jstl</artifactId>
               <version>${jstl.version}</version>
           </dependency>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
               <version>${servlet-api.version}</version>
               <scope>provided</scope>
           </dependency>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>jsp-api</artifactId>
               <version>${jsp-api.version}</version>
               <scope>provided</scope>
           </dependency>
           <!-- 檔案上傳元件 -->
           <dependency>
               <groupId>commons-fileupload</groupId>
               <artifactId>commons-fileupload</artifactId>
               <version>${commons-fileupload.version}</version>
           </dependency>
           <!-- Redis客戶端 -->
           <dependency>
               <groupId>redis.clients</groupId>
               <artifactId>jedis</artifactId>
               <version>${jedis.version}</version>
           </dependency>
           <!-- solr客戶端 -->
           <dependency>
               <groupId>org.apache.solr</groupId>
               <artifactId>solr-solrj</artifactId>
               <version>${solrj.version}</version>
           </dependency>
           <!-- dubbo相關 -->
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>dubbo</artifactId>
               <version>${dubbo.version}</version>
           </dependency>
           <dependency>
               <groupId>org.apache.zookeeper</groupId>
               <artifactId>zookeeper</artifactId>
               <version>${zookeeper.version}</version>
           </dependency>
           <dependency>
               <groupId>com.github.sgroschupf</groupId>
               <artifactId>zkclient</artifactId>
               <version>${zkclient.version}</version>
           </dependency>
           <dependency>
               <groupId>org.apache.activemq</groupId>
               <artifactId>activemq-all</artifactId>           
               <version>${activemq.version}</version>
           </dependency>
           <dependency>
               <groupId>org.freemarker</groupId>
               <artifactId>freemarker</artifactId>
               <version>${freemarker.version}</version>
           </dependency>    
		</dependencies>
	</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.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
	</build>
  

</project>

搭建OA-common工程

接下來,我們來給OA-common工程的pom.xml檔案新增依賴,這個工程是用來存放所有工程都可能用到的公共元件,所以在pom.xml中新增公共的依賴.由於已經在OA-parent中定義了jar包的版本,所以在子模組中新增依賴的時候,不用也不要指定jar包版本

<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>
  <parent>
    <groupId>com.QEcode</groupId>
    <artifactId>OA-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>OA-common</artifactId>
  
   <!-- 依賴工具類的jar包 -->
    <dependencies>      
        <!-- 時間操作元件 -->          
         <dependency>
             <groupId>joda-time</groupId>
             <artifactId>joda-time</artifactId>
             <version>${joda-time.version}</version>
         </dependency>
         <!-- Apache工具元件 -->
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>${commons-lang3.version}</version>
         </dependency>
         <dependency>     
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-io</artifactId>
             <version>${commons-io.version}</version>
         </dependency>
         <dependency>         
             <groupId>commons-net</groupId>
             <artifactId>commons-net</artifactId>
             <version>${commons-net.version}</version>
         </dependency>
         <!-- Jackson Json處理工具包 -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
             <version>${jackson.version}</version>
         </dependency>
         <!-- quartz任務排程框架 -->
         <dependency>
             <groupId>org.quartz-scheduler</groupId>
             <artifactId>quartz</artifactId>
             <version>${quartz.version}</version>
         </dependency>
         <!-- 單元測試 -->
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>${junit.version}</version>
             <scope>test</scope>
         </dependency>
         <!-- 日誌處理 -->
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
    </dependencies>
</project>

搭建OA-system工程

 

 

 

 

搭建好OA-system後,由於OA-common是公共工程,所以需要在OA-system的pom.xml引入對OA-common的依賴

<dependencies>
  	<dependency>
  		 <groupId>com.QEcode</groupId>
   		  <artifactId>OA-common</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	
  </dependencies>

 

下面我們在來新增屬於該聚合工程的四個模組。

搭建OA-system-pojo工程

 

由於OA-system-pojo不用依賴任何其他jar包,僅僅用來給其他模組提供實體類,所以不用引入依賴

搭建OA-system-dao工程

 

由於該工程是持久層,所以肯定需要OA-system-pojo的依賴,此外還需要有關資料庫操作的依賴:hibernate,mysql,連線池.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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.QEcode</groupId>
    <artifactId>OA-system</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>OA-system-dao</artifactId>
  
  <dependencies>
  	<dependency>
  		 <groupId>com.QEcode</groupId>
    	<artifactId>OA-system-pojo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	<!-- hibernate -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
	</dependency>
  	<!-- MySql -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <!-- 連線池 -->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
      </dependency>
  </dependencies>
  
  
  
</project>

搭建OA-system-interface工程

這個工程是服務層介面,被web層和service層所引用,在service層實現介面.在web層使用介面.

OA-system-interface工程的建立和上面工程建立的方法一樣,

 

該工程也需要OA-system-pojo的依賴

<dependencies>
  <!-- pojo -->
  <dependency>
   <groupId>com.QEcode</groupId>
    <artifactId>OA-system-pojo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </dependency>
 
  </dependencies>

搭建OA-system-service工程

由於其他OA-system-*的工程都是jar包,我們是無法直接啟動的,所以最後需要建立一個war工程來引用這些jar工程,將其聚合起來.

現在考慮要引入哪些依賴?

OA-system-service是服務層,所以必須引入dao層,此外由於我們這個專案是SSh實戰專案,所以也需要引入spring的依賴,此外我們需要服務層介面interface

 

<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>
  <parent>
    <groupId>com.QEcode</groupId>
    <artifactId>OA-system</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>OA-system-service</artifactId>
  <packaging>war</packaging>
  
  <dependencies>
  	<dependency>
  		<groupId>com.QEcode</groupId>
  		<artifactId>OA-system-dao</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	<dependency>
  		<groupId>com.QEcode</groupId>
  		<artifactId>OA-system-interface</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
	<!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
	</dependency>
  </dependencies>
</project>

在新增依賴後,會發現OA-system-service工程報錯,這是因為這個是一個web工程,而maven建立的工程是沒有web.xml檔案的,所以會報錯.解決的辦法很簡單:建立一個web.xml檔案.你可以自己在webapp目錄下建立WEB-INF/web.xml,不過有個更簡單的方法.

右擊OA-system-service工程

在點選之後就會自動生成web.xml檔案,工程就不會報錯

搭建OA-system-web工程

這個工程是OA-system的表現層工程,

 

接下來要新增依賴:spring的依賴是必須的,此外還需要jsp的元件和struts2的依賴

<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>
  <parent>
    <groupId>com.QEcode</groupId>
    <artifactId>OA-system</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>OA-system-service</artifactId>
  <packaging>war</packaging>
 
  <dependencies>
  <dependency>
  <groupId>com.QEcode</groupId>
  <artifactId>OA-system-dao</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  </dependency>
  <dependency>
  <groupId>com.QEcode</groupId>
  <artifactId>OA-system-interface</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  </dependency>
 <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <!-- JSP相關 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- struts2 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>${struts.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-spring-plugin</artifactId>
			<version>${struts.version}</version>
		</dependency>
        
  </dependencies>
</project>

由於這個是web工程,所以也需要建立web,xml檔案,建立方法和上面的相同

 

 

===============================================================================================

在寫部落格的時候,可能在專案中有一些問題沒有被發現,在我修改後,忘記寫到部落格上,所以我將這個專案上傳到github上,大家可以在github上獲取專案的程式碼

下面是github地址,大家Fork and Star

OA-Reconsitution