天天看點

Maven的依賴

**

Maven中的依賴

**

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

maven中的依賴關系對于新手來說其實可以了解為繼承關系,簡單來說就是子項目依賴父項目進而使用父項目中的包和工具。

  1. 依賴的範圍(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中查找它。

  2. 依賴管理器

    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>
           

繼續閱讀