**
Maven中的依賴
**
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
<scope></scope>
</dependency>
</dependencies>
maven中的依賴關系對于新手來說其實可以了解為繼承關系,簡單來說就是子項目依賴父項目進而使用父項目中的包和工具。
-
依賴的範圍(scope)
即在上面的
<scope></scope>
中填寫的内容。
(1)Compile:預設值,适用于所有階段,會随着項目一起釋出
(2)Provider:類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar(javaee)
(3)Runtime:隻在運作時使用,如JDBC驅動,适用運作和測試階段。
(4)Test:隻在測試時使用,用于編譯和運作測試代碼。不會随項目(mvn install)釋出。
(5)System:類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
-
依賴管理器
dependencyManagement和dependencies
dependencyManagement:隻能在父項目中出現,在下面寫的jar包必須帶上版本号;
dependencies:下面寫的jar包可以不帶版本号;如果木有去父項目中找依賴管理器;或者dependencies
以導c3p0為例,修改pom.xml檔案如下
父項目demoMav的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>com.jinghangzz</groupId>
<artifactId>demoMav</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>demoMav</name>
<description>demoMav</description>
<modules>
<module>demoMav-childA</module>
<module>demoMav-childB</module>
</modules>
<!-- 自定義屬性 -->
<properties>
<!-- 标簽名随便寫,在版本号引用的地方要使用
到後面log4j2的時候就展現出來了
-->
<c3p0.version>0.9.5.2</c3p0.version>
</properties>
<!-- 所有的标簽,外面肯定是一個複數,裡面是一個單數 -->
<!--
dependencyManagement:依賴管理器,在父項目必須加上jar包的版本号,在子項目中千萬不要加版本号
在子項目中重新定義一個dependency,但是不能寫版本号
解決多版本問題:
項目經理或者技術總監,在父項目中寫上所有的依賴管理器;(普通開發人員不允許操作父項目,木有權限)
普通開發人員使用jar包的時候,先到父項目依賴管理器中找jar包,找到以後,在子項目中不寫版本号;
如果父項目中木有jar包,給項目經理或者技術總監說一聲
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<!-- <version>0.9.5.2</version> -->
<!-- ${自定義屬性的标簽名} -->
<version>${c3p0.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 标準配置 -->
<build>
<!-- 插件 -->
<plugins>
<!-- JDK版本
在Plugin中,要把dependency換成plugin
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<!-- -JDK的版本 -->
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 打包源代碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<!-- 以一個附件的形式打包 -->
<attach>true</attach>
</configuration>
<executions>
<execution>
<!-- 階段 -->
<phase>compile</phase>
<!-- 目标 -->
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 設定resouce目錄下的所有檔案編碼,否則如果配置xml檔案中有中文字元,部署後可能會引起運作失敗 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 忽略編譯項目時的測試運作
maven install的時候自動跳過maven test
maven clean
maven build
maven test(自動跳過此部分)
maven install
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
子項目demoMav-childA的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.jinghangzz</groupId>
<artifactId>demoMav</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>demoMav-childA</artifactId>
<name>demoMav-childA</name>
<description>demoMav-childA</description>
<dependencies>
<!-- 當發現一個pom.xml中, dependency木有寫版本号,系統會到父類中找依賴管理器;-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</dependency>
</dependencies>
</project>
依賴管理器最重要的一點就是隻能在父項目中有,且必須帶上版本号,子項目中不帶版本号。
注意,以上的依賴關系都是在有依賴管理器(dependencyManagemen)的前提下,而沒有管理器的時候版本号還是該帶就帶的。如
子項目demoMav-childB的pom.xml,子項目demoMav-childB依賴子項目demoMav-childA
<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.jinghangzz</groupId>
<artifactId>demoMav</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>demoMav-childB</artifactId>
<name>demoMav-childB</name>
<description>demoMav-childB</description>
<dependencies>
<dependency>
<groupId>com.jinghangzz</groupId>
<artifactId>demoMav-childA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 在此項目中如果木有c3p0,此項目依賴A項目,A項目有c3p0,會把A項目中所有的jar都帶過來 -->
</dependencies>
</project>