Java EE 學習(5):IDEA + maven + spring 搭建 web(1)


參考:http://www.cnblogs.com/lonelyxmas/p/5397422.html

  http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html(IDEA 使用教程,寫的不錯喲~~)

          孔老師的SpringMVC視頻教程

記錄: 本節主要完成 使用 maven 管理 spring + 項目 包,搭建 maven+spring 的 web 項目平台。

前提: 已安裝並配置好 

 - Intellij IDEA 16.3.5 Ultimate

 - JDK 1.8.0_45

 - Maven 3.3.9

 - Tomcat 8.5.12

 - MySql 5.7

 - Spring 4.0.0

- Bootstrap 3.3.5 (可有可無)

不清楚的可參考 

1. 創建 Maven 項目

對於不使用Maven的開發者,可以直接建一個簡單的Web項目。使用Maven的話,請按照圖進行操作。

(1)File->New Project 可進入以下界面:首先選擇左邊欄Maven,再配置JDK(一般如果之前添加了JDK的話會自動填充,如未添加的話點擊旁邊的New將JDK目錄導入即可)。勾選“Create from archetype“,然后選中4處藍色位置webapp,點Next。

 

(2)Next 后進入如下界面:這里需要填寫GroupId和ArtifactId還有Version,這三個屬性目的是標識你的項目的唯一性,比如Tomcat的GroupId是org.apache,即它是apache組織的項目,ArtifactId是tomcat,項目名為tomcat,而我當前使用的Version是7.0.68。這些只在發布時有用,在此可以隨便填寫,填好后點Next。

 (3)Next 后,進入如下界面(配置 maven ):打開Maven home directory,可以發現IntelliJ IDEA已經集成了Maven 2和Maven 3兩個版本,如果使用默認集成的maven的話,選擇Buldled(Maven 3),直接點擊Next。

我們也可以導入本地新安裝的較新的Maven版本,點擊藍色箭頭右邊的 ... 按鈕將Maven路徑導入即可,點擊Next:

(4)Next 后進入如下界面:填寫項目名(可與上面 ID 相同,也可不同),選擇項目保存路徑,點擊Finish:

 

 說明:(1)相比較於多 Module 項目,小項目就無需搞得這么復雜。只有一個 Module 的結構 IntelliJ IDEA 也是支持的,並且 IntelliJ IDEA 創建項目的時候,默認就是單 Module 的結構的。

(2) 如上圖,在輸入 Project name 的時候,Module name 和 Module file Location 自動進行改變,同時 Project location Module file Location 完全一樣,這也就表示,Project 目錄 Module 目錄是同一個,所以此時 Project 目錄下就會有 src 目錄,但是我們應該明白其本質還是 Module 的目錄

(5)finish 后,進入如下界面,maven會在后台生成web項目,這需要等待一定的時間,視網絡環境而定,經驗發現用較新版本的maven項目生成更快,使用IDEA集成的maven可能會等待很長一段實踐。

左邊紅框中展示了該項目的文件結構。可以發現:

(1)如上圖標注 1 所示,.idea 即為 Project 的配置文件目錄。

        如上圖標注 2 所示,.iml 即為 Module 的配置文件目錄。  

  • 通過上面的了解我們也知道 IntelliJ IDEA 項目的配置變動都是以這些 XML 文件的方式來表現的,所以我們也可以通過了解這些 XML 文件來了解 IntelliJ IDEA 的一些配置。也因為此特性,所以如果在項目協同中,我們要保證所有的項目配置一致,就可以考慮把這些配置文件上傳到版本控制中。如果把這些文件加入到版本控制之后,那又有一點是需要考慮的,那就是協同者 Checkout 項目下來之后,按自己的需求進行項目配置的之后,項目的 XML 文件也會跟着變化。此時協同者的這些變化的文件就不應該再上傳到版本控制中。至於如何更好地控制這些不想隨時提交的文件,在接下來的版本控制專講中會進行詳細講解。

(2)在src/main下創建了以下文件夾:

recources文件夾:一般用來存放一些資源文件
webapp文件夾:用來存放 web 配置文件以及 jsp 頁面等,這已經組成了一個原始的 web 應用。

注意:選擇 右邊紅框 的 Enable-Auto-Import,可以在每次修改 pom.xml 后,自動的下載並導入 jar 包,這一點在后面詳述。

2. 新建 source 文件夾並命名為 Java,並設置:

(1) 按 ctrl+alt+shift+s,或者File->Project Structure,或點擊如下:查看項目結構

 

出現如下圖:

(2)選擇Modules,在SpringMVCDemo的src\main文件夾中新建一個文件夾,取名為java:

接着,選中java文件夾,點擊上面的 Make as:Sources,該文件夾就會變成藍色,用以保存java代碼,按OK,結束配置。

3.Maven自動導入jar包(添加項目包):包括 Spring 包(使用 spring 框架),測試包,日志包 等... 

既然我們要用 SpringMVC 開發,那肯定少不了 SpringMVC 的相關 jar 包。如果不使用 Maven 的話,那就需要去官網下載相關的jar包,然后導入到項目中。現在使用 maven 的話,就不需要上網找jar包了。具體容我一一道來。

 

    Maven所做的工作其實很簡單,就是自動把你需要的jar包下載到本地,然后關聯到項目中來。maven的所有jar包都是保存在幾個中央倉庫里面的,其中一個最常用的是Maven Repository,即,你需要什么 jar 包,它就會從倉庫中拿給你。那么如何告訴 maven 需要什么 jar 包呢?我們看看工程目錄,能找到一個 pom.xml 文件(這個文件在剛創建好項目時就已經展現在了大家面前),maven 就是靠它來定義需求的,代碼如下:

<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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>testWeb</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>testWeb Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>testWeb</finalName>
    </build>
</project>

    我們可以看到這個文件包含了我們之前定義的本項目的gropId等信息,這些信息是該項目的標識,我們不要去改動它們。

    重點看<dependencies>標簽,翻譯過來是”依賴“的意思,也就是說把對每個包的需求都稱為一個依賴<depedency>,定義在<dependencies>中。在每個<depedency>中,你需要提供的是所需 jar包的 groupId、artifactId、version 這三個必要信息。比如上面我們看到引入可一個 junit 包,格式如下:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>

    這是單元測試包,提供了三個基本信息,第4個 scope 對其他包來說是非必需的。所有jar包的引入都要滿足這個格式。那么如何查看這些 jar 包的3個信息呢,可能剛接觸是開發者還不是很熟悉,這個時候就需要查閱倉庫了。比如我們需要引入 Spring 核心 jar 包 spring-core,打開Maven Repository搜索spring-core,進入如下界面:

 點擊進入紅框選中的 Spring Core,如下所示,可以看到各版本的使用情況:

   選擇使用最多版本 4.3.7.RELEASE,可以看到其dependency寫法如下紅框所示:

 

  我們將其復制到 pom.xml 中的 <dependencies> 中:

    這樣,Maven 就會開始自動下載 jar 包到本地倉庫,然后關聯到你的項目中,下載完成后,我們展開工程目錄中 External Libraries:

    可以發現,雖然我們只寫了一個依賴,但是它導入了兩個jar包,也就是說,導入某個jar包時,與它密切相關的 jar 包也會同時被導入進來。

    除了 spring-core,我還要 spring-context,復制 spring-core 的 <dependency>,將 spring-core 改為 spring-context,如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

    下載完成后,查看External Libraries,會不會發現,瞬間導入了好多jar包(當然不是瞬間,這得看你的網速了)呢:

    這就是 Maven 的強大之處,如果你需要使用 testWeb 開發網站的話,只需記住幾個重要的包的名字,就可以輕松將所有包導入項目中。

    長話短說,現在我們要進行 testWeb 的開發,請把你的 pom.xml 變成下面的樣子,當然不要改你的 grupId 等信息(從modelVersion 到 url 都不要動):

(1) 添加公用版本信息(可以不添加,直接將版本寫入即可)

<properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
</properties>

(2)接着,請在<dependencies>中加入以下依賴:

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>

將<build>改成如下形式:

<build>
     <finalName>springmvcdemo</finalName>
     <plugins>
          <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>1.8</source>   <!-- 此處的 1.8 指的是 JDK 的版本,目前一般為 1.7 或 1.8 -->
                   <target>1.8</target>
               </configuration>
          </plugin>
     </plugins>
</build>

 

我的 完整的 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>testWeb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>testWeb Maven Webapp</name>
  <url>http://maven.apache.org</url>

    <properties>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>5.2.10.Final</hibernate.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>testWeb</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
完整的 pom.xml 文件

 

我們可以發現,除了導入了spring相關jar包,還有一些其他的包,這些包都是有作用的,我們后面慢慢說。如果不使用Maven請自行下載spring、hibernate、mysql、jstl等相關jar包然后導入到工程中。至此,jar包的導入就完成了

 

此處補充下 Maven 快速排查依賴包沖突

(1)如下圖,點擊 箭頭所指按鈕

  • 出現左邊的項目依賴結構圖,通過此圖我們可以很好的觀察項目的依賴依賴情況。
  • 如下標注1 所示,我們可以直接在依賴結構圖上編輯依賴,常用的就是此排除功能。

 (2)如下圖所描述,一般我們出現紅色線的時候是都要進行排除的,防止出現因為版本不同的依賴包造成無法編譯。

(另開一文,見Java EE 學習(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM