1. 程式人生 > >Maven配置和使用(二)-核心講解

Maven配置和使用(二)-核心講解

Maven-pom.xml檔案詳解

  • pom.xml作用分析
    現在已經實現了Maven的基本配置,但是這個時候的配置會存在以下問題:
    1)當前情況下,對於Maven專案中使用的JDK都是通過了Eclipse自身的配置完成的,這樣的配置根本就沒有任何實際的意義,因為在真正使用Maven進行部署的時候,這樣的配置是會被Maven忽略掉的。
    2)如果要使用開發框架,例如:現在最為流行的Spring與MyBatis,這個時候往往會需要大量的.xml檔案和.properties檔案,此時這些檔案預設情況下都會儲存在resources目錄之中,而後會將其在執行時儲存在classes目錄下,可是專案往往需要劃分如下幾種情況:
    1.開發者使用:使用的是開發者自己的主機配置,那麼一些配置一定與本人電腦有關
    2.集中的測試:往往又需要進行一些配置的更新,(連線的伺服器的更新,資料庫的更新)
    3.線上產品環境:需要為其更換為公網的相關配置;

3)java開發領域上所有的開發包的版本是一件非常頭疼的事情,那麼當一個pom.xml檔案非常龐大的時候你該如何進行版本的更換呢?

4)專案開發完成之後往往需要將程式打包為.jar或者.war檔案,原始碼檔案,這些檔案如何可以正常生成。

之前的配置都屬於Maven的簡單使用過程,如果要想在真實的開發環境中去使用Maven,那麼就需要進行pom.xml檔案的配置。
也就是說這個pom.xml檔案並不單單只是一個配置依賴程式包的關係。它可以配置更多的屬性,包括外掛項。

利用這些配置項的設定,能夠幫助我們儘可能快速提高開發效率。

  • 定義環境屬性
    所謂的環境屬性相當於是在pom.xml檔案裡面定義一些基本的變數資訊,例如:可以將專案的名稱、版本編號以及一些其他的屬性路徑等等都作為變數進行一個整體的宣告。那麼這樣對於整個的開發程式就可以利用這些變數的引用實現內容的變更。

1.傳統的pom.xml檔案引入的配置問題:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency
>
<groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.7.RELEASE</version> </dependency> </dependencies>

注意這些開發包的版本應該一致,版本可能會被隨時更新。

那麼在這樣的情況下就會發現,如果直接將所有的maven依賴程式庫直接複製到pom.xml檔案之中,那麼會造成非常麻煩的維護問題。

2.建議定義全域性屬性來進行相關的內容控制:
全域性屬性定義:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

具體配置:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.12</junit.version>
        <srping.version>5.0.7.RELEASE</srping.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${srping.version}</version>
        </dependency>
    </dependencies>

這樣對於整個程式而言,定義兩個版本的變數,並且引用
如果將一些公共的版本資訊或者是一些目錄資訊都設定為全域性環境屬性,這樣對於日後的專案的維護會非常方便,所以在實際的開發之中,建議大家都是用這樣的方式來進行基本資訊的定義。

將具體版本號設定為全域性環境變數,並且引用即可。

  • 外掛配置

在之前進行Maven問題分析的時候強調過,所有在Eclipse之中進行的Maven的配置都沒有實際的意義,只是針對於當前的工作區和當前使用的專案有效,那麼為了真正的讓整個的專案長期有效,再這樣的情況下就強烈建議大家需要設定一些相關的外掛,例如:可以設定編譯外掛以配置為完所需要的JDK版本
1.修改pom.xml檔案進行JDK編譯外掛的配置: build

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jdk.version>1.7</jdk.version><!-- 定義一個描述jdk版本的公共屬性 -->
        <junit.version>4.12</junit.version>
        <srping.version>5.0.7.RELEASE</srping.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${srping.version}</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>em</finalName>
        <plugins> <!-- 定義要使用的外掛,在整個的Maven裡面外掛很多 -->
            <plugin><!-- 定義其中的一個外掛 -->
                <groupId>org.apache.maven.plugins</groupId><!-- 定義外掛的組織資訊 -->
                <artifactId>maven-compiler-plugin</artifactId><!-- 要使用的是編譯外掛 -->
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encode>${project.build.sourceEncoding}</encode>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.雖然你已經為專案配置好了外掛,但是這個時候該外掛沒有實際的效果,如果要想讓配置起作用,還需要進行整體的專案更新
ALT+F5或者
滑鼠右鍵-Maven-Update Project

這裡寫圖片描述
可以方便的進行專案配置

這裡寫圖片描述

此處執行的時候可能會報錯!

這裡寫圖片描述
test的時候要選擇settings,預設的倉庫地址未必能用
選擇國內倉庫進行配置 :

    <build>
        <finalName>em</finalName>
        <plugins> <!-- 定義要使用的外掛,在整個的Maven裡面外掛很多 -->
            <plugin><!-- 定義其中的一個外掛 -->
                <!-- <groupId>org.apache.maven.plugins</groupId> --><!-- 定義外掛的組織資訊 -->
                <artifactId>maven-compiler-plugin</artifactId><!-- 要使用的是編譯外掛 -->
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

注意:必須選擇Goals:package

這裡寫圖片描述

執行結果:
這裡寫圖片描述

可以編譯成可執行的jar檔案

3.隨後可以直接通過package進行程式的打包處理:
4.很多時候會發現在一些開源專案釋出的時候,除了有.jar檔案之外,還會發布原始碼(.jar),如果現在要想實現原始碼的輸出配置,那麼就可以繼續使用一個外掛:

            <plugin><!-- 定義其中的一個外掛 -->
                <groupId>org.apache.maven.plugins</groupId><!-- 定義外掛的組織資訊 -->
                <artifactId>maven-source-plugin</artifactId><!-- 要使用的是編譯外掛 -->
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
                <executions><!-- 進行執行的配置 -->
                    <execution>
                        <id>sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

5.隨後同樣執行專案的打包處理,打包之後會自動在target目錄下生成原始檔資訊。

重新執行:
先打jar包,再執行原始碼的打包

這裡寫圖片描述
這裡寫圖片描述

原始碼jar包給出的是原始碼
而另外一個jar包是隻有class原始碼

6.實際上也可以在執行的時候生成相關的程式文件,在執行的時候使用:javadoc:javadoc 前提:你需要有文件註釋

範例定義一個新的程式類:
必須建立在 src/main/java,而不是src/test/java下面

package cn.mldn.util;

import java.sql.Connection;

/**
 * 本類的主要功能是取得資料庫的連線資訊
 * @author wanghaoxin
 *
 */
public class DBUtil {
    /**
     * 取得資料庫的連線物件
     * @return 準備好的資料庫連線物件,如果沒有連線,則返回null
     */
    public Connection getConnection(){
        return null;

    }
    /**
     * 設定資料庫連線的驅動程式名稱
     * @param driverName 資料庫連線程式的路徑名稱
     */
    public void setDriverName(String driverName){

    }
}

7.進行文件的生成,在執行的時候重新設定執行項:

這裡寫圖片描述

此時實際上會通過網路下載一些支援的程式包

執行結果:
這裡寫圖片描述
實際上儲存到了site目錄之中
這裡寫圖片描述

8.現在有一個問題出現了:這個時候給出的doc文件是以檔案目錄的形式完成的,而很多時候都會以*.jar檔案的形式來完成,所以這種情況下,如果希望繼續以打包的形式來實現輸出,那麼繼續配置一個文件外掛:

            <plugin><!-- 定義其中的一個外掛 -->
                <groupId>org.apache.maven.plugins</groupId><!-- 定義外掛的組織資訊 -->
                <artifactId>maven-javadoc-plugin</artifactId><!-- 要使用的是編譯外掛 -->
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
                <executions><!-- 進行執行的配置 -->
                    <execution>
                        <id>javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

對於常用的一些外掛把程式碼留好了,直接複製貼上使用即可。
Maven-clean:會自動清除掉之前打包的內容和資料
執行結果:

這裡寫圖片描述

所以很多開源優秀軟體、MyBatis的幫助文件都jar包的形式出現,就是因為都使用了這樣的外掛。