1. 程式人生 > >maven 03-pom.xml核心配置

maven 03-pom.xml核心配置

程序開發 ack 自動 release mage 行程 lib 進行 ram

maven的pom.xml配置文件並不單單只是一個配置依賴程序包的關系,他可以配置更多的屬性,包括插件項。

定義環境屬性

  • 在pom.xml文件裏面定義一些基本的變量信息
  • 可以將項目名稱、版本編號、一些其他的相關屬性都作為變量進行整體的聲明
  • 在整個配置就可以利用這些變量的引用實現內容的變更
<!-- 定義環境屬性 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jdk.version>1.8</jdk.version>
    <junit.version>4.12</junit.version>
    <spring.version>5.1.1.RELEASE</spring.version>
    <servlet.version>4.0.1</servlet.version>
  </properties>

<!-- 引用變量 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
    </dependency>
  </dependencies>

插件配置

  • 所有在MyEclipse之中進行的Maven配置都沒有實際意義,只是針對於當前的工作區和當前使用的項目有效
  • 為了真正的讓整個的項目長期有效,可以在pom.xml文件中設置一些相關插件

1、修改pom.xml文件進行JDK編譯插件配置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jdk.version>1.8</jdk.version> <!-- 定義一個描述jdk版本的公共屬性 -->
</properties>
<build>
      <finalName>m2work</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

  • MyEclipse雖然已經為項目配置好了插件,但這個時候該插件沒有實際的效果
  • 如果要想讓配置起作用,還需要進行整體的項目更新

技術分享圖片

3、可以直接通過package進行程序的打包處理

技術分享圖片

4、輸出源代碼jar包

  • 修改pom.xml配置文件,然後直接通過package進行程序的打包處理
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <configuration>
        <encode>${project.build.sourceEncoding}</encode>
    </configuration>
    <executions>
        <execution>
            <id>sources</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

5、生成相關程序文檔,前提是代碼有詳細註釋

  • 修改pom.xml配置文件,然後直接通過package進行程序的打包處理
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <encode>${project.build.sourceEncoding}</encode>
    </configuration>
    <executions>
        <execution>
            <id>javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

技術分享圖片

包的作用域

  • WEB項目開發會將所有的開發程序打包為一個*.war文件
  • 那麽在這個war文件裏面就會存在所有的第三方程序開發包
  • 對於一些重要的開發包保存在lib目錄下
  • 如果不需要的開發包就不希望其輸出到lib之中
  • 例如:junit只做測試使用,而實際項目發布的時候不希望輸出到war文件之中
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>
  • scope就屬於開發包的作用域
  • junit只是一個測試環境,所以使用一個test的作用域
  • spring-core並沒有任何配置,默認為compile
  • servlet程序包本身都會由Tomcat容器提供,所以這個包只在編譯項目的時候有效,本質上沒有沒有保存在lib目錄下

  • compile
    • 依賴項的默認作用範圍
    • 依賴項在運行、測試、編譯
  • runtime
    • 依賴項只有在運行時才需要
  • test
    • 依賴項只有在測試時才需要
  • provided
    • 依賴項只有在編譯和測試時才需要,運行時由jdk或者運行容器提供
  • system
    • 依賴項為自己提供,不需要Maven倉庫下載

依賴包的排除

  • 在進行包的依賴控制的時候,會發現存在有其他的依賴關系,裏面存在有重復的依賴關系
  • 這時候整個項目之中只會存在有一個公共的commons-logging開發包
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

繼承關系

  • 在一個項目中,幾乎每個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>

  <groupId>cn.liang</groupId>
  <artifactId>base</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>  <!-- 定義一個父的pom.xml文件 -->

  <name>base</name>
  <url>http://maven.apache.org</url>

<!-- 在以後的開發中,所有的版本控制都交給base完成 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jdk.version>1.8</jdk.version> <!-- 定義一個描述jdk版本的公共屬性 -->
    <junit.version>4.12</junit.version>
    <spring.version>5.1.1.RELEASE</spring.version>
    <servlet.version>4.0.1</servlet.version>
  </properties>
 
  <build>
      <finalName>base</finalName>
      <plugins>
          <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>
          
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-source-plugin</artifactId>
              <configuration>
                  <encode>${project.build.sourceEncoding}</encode>
              </configuration>
              <executions>
                  <execution>
                      <id>sources</id>
                      <goals>
                          <goal>jar</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
          
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <configuration>
                  <encode>${project.build.sourceEncoding}</encode>
              </configuration>
              <executions>
                  <execution>
                      <id>javadocs</id>
                      <goals>
                          <goal>jar</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
  </build>
</project>

  • 子項目的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>cn.liang</groupId>
      <artifactId>base</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../base/pom.xml</relativePath>
  </parent>

  <artifactId>m2work</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1</version>
   <name>m2work</name>
   <url>http://maven.apache.org</url>

   <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
      </dependency>
         
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>${servlet.version}</version>
      </dependency>
          
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
      </dependency>  
  </dependencies>
  
  <build>
      <finalName>m2work</finalName>
  </build>
</project>
  • 在父類的pom.xml文件裏面直接導入好所需要的開發包
<dependencyManagement>
  <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
      </dependency>
  </dependencies>
 </dependencyManagement>
  • 但對於子項目而言,實際上也需要繼續導入開發包,只不過不需要管理版本編號問題了
<dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
      </dependency>
  </dependencies>

maven 03-pom.xml核心配置