1. 程式人生 > >maven 之依賴管理

maven 之依賴管理

-- tomcat7 oca bsp nco 測試的 plugins 1.2 聚合

1. 基本配置:

<!-- dependencies 該標簽下可以配置多個依賴 -->
  <dependencies>
      <!-- 配置一個依賴  通過gav來配置的-->
    <dependency>
        <!-- gav是必須配置的基本坐標 -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <!-- type用於指定依賴的類型  默認為jar -->
      <type>jar</type>
      <!-- classifier 該元素用來幫助定義構建輸出的一些附屬構件。比如javadoc和sources.jar
               。 這是java文檔和源代碼。 
      
<classifier></classifier>--> <!-- scope只依賴的範圍 --> <scope>test</scope> </dependency> </dependencies>

1.依賴範圍:

a)Compile 編譯依賴範圍。 如果沒有指定,就會默認使用該依賴範圍。 使用此依賴範圍的Maven依賴, 對於編譯,測試,運行都有效。

b)Test: 測試依賴範圍。 只在測試的時候需要。比如junit

c)Provided: 已提供依賴範圍。 使用此依賴範圍的Maven依賴,對於編譯和測試有效, 但在運行時無效。 典型的例子是servlet-API, 編譯和測試項目的需要, 但在運行項目時, 由於容器已經提供, 就不需要Maven重復地引入一遍。

d)Runtime: 運行時依賴範圍。 使用此依賴範圍的Maven依賴,對於測試和運行有效, 但在編譯代碼時無效。 典型的例子是:jdbc驅動程序, 項目主代碼的編譯只需要jdk提供的jdbc接口,只有在執行測試或者運行項目的時候才需要實現上述接口的具體jdbc驅動。

e)System: 系統依賴範圍。 一般不使用。

2.如何查找要依賴的坐標:

在網站上查詢:http://mvnrepository.com/

也可以從私服的索引上查詢

3.依賴的傳遞性

在maven中,依賴具有傳遞性。

項目A----->log4j

項目B------>項目A,那麽項目B也就依賴了log4j

4.依賴的傳遞性可能造成沖突

項目A------>log4j1.2.9

項目B------->log4j1.2.12

項目B-------->項目A

解決方案:最短路徑優先,項目B最終依賴的是log4j1.2.12

項目A------->log4j1.2.9

項目B------->log4j1.2.12

項目C-------->項目A

項目C--------->項目B

解決方案:誰先聲明使用誰

5.依賴的排除

在jar沖突時,maven可以解決這個問題。但是有時想使用某一個jar,這個時候可以使用依賴排除的方式將不需要的jar包排除

<dependency>
            <groupId>cn.sxt</groupId>
            <artifactId>user-mapper</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 依賴的排除 -->
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

7.聚合

由於項目可能是由多個模塊組成的,一個一個模塊操作比較麻煩。所以可以統一的設置一個項目來管理。

 <groupId>cn.sxt</groupId>
  <artifactId>user-aggregation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>user-aggregation</name>
  <modules>
      <module>../user-vo</module>
      <module>../user-mapper</module>
      <module>../user-service</module>
  </modules>

8 . 繼承

父類的項目為pom

<groupId>cn.sxt</groupId>
  <artifactId>user-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>user-parent</name>
  
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <log4j.version>1.2.9</log4j.version>
  </properties>
  
  <dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
  </dependencies>

子類的配置文件

<parent>
      <groupId>cn.sxt</groupId>
      <artifactId>user-parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>cn.sxt</groupId>
  <artifactId>user-vo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
  <name>user-vo</name>
  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </dependency>
      </dependencies>
  </dependencyManagement>

9. web項目開發啊

a)選擇骨架時,選擇webapp

技術分享

依賴相關的jar包

<dependency>
            <groupId>cn.sxt</groupId>
            <artifactId>user-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

配置tomcat插件

<!-- 配置插件 -->
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!-- 端口 -->
                    <port>8080</port>
                    <!-- 訪問路徑 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>

通過命令:tomcat:tun運行

測試:http://localhost:8080/

maven 之依賴管理