官網: 傳送門html
Maven 項目結構java
$ MavenProject |-- pom.xml |-- src | |-- main | | `-- java | | `-- resources | `-- test | | `-- java | | `-- resources `-- README.md
<?xml version="1.0" encoding="UTF-8"?> <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> <packaging>pom</packaging> <modules> <module>mscx-ad-discovery</module> <module>mscx-ad-zuul</module> <module>mscx-ad-gateway</module> <module>mscx-ad-discovery-nacos</module> <module>mscx-ad-common</module> <module>mscx-ad-db</module> <module>mscx-ad-sponsor</module> <module>mscx-ad-search</module> <module>mscx-ad-feign-sdk</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.sxzhongf</groupId> <artifactId>mscx-ad</artifactId> <version>1.0-SNAPSHOT</version> <name>分佈式廣告系統</name> <description>基於Spring Cloud Alibaba 實現的分佈式廣告系統</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!--定義遠程maven倉庫--> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>alibaba</id> <name>ali Milestones</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Maven思想 是 約定大於配置,默認依賴中,scope 是compile.
compile(會被打包到當前project)spring
表示被依賴的package參與當前project的編譯,包含後續的測試,運行週期都會參與,是一個強依賴。
testapache
表示被依賴的jar 僅參與測試相關的處理,包裹測試代碼的編譯,執行。(如junit)
runtimejson
表示被依賴的jar不須要參與項目的編譯,可是後期的測試和運行週期須要參與。
providedmaven
打包的時候不須要包含進去,其餘的Container會提供該依賴支持,理論上該依賴能夠參與編譯、測試運行等週期 ,至關於compile,可是在打包階段作了exclude命令。
system分佈式
從參與環境來看,和provided相同,可是被依賴項不會從maven倉庫獲取,而是從本地文件系統獲取,必定須要配合
systemPath
屬性使用
importide
This scope is only supported on a dependency of typepom
in the<dependencyManagement>
section.
官方解釋:傳送門spring-boot
Dependency mediation (最近依賴原則)測試
"nearest definition" means that the version used will be the closest one to your project in the tree of dependencies. For example, if dependencies for A, B, and C are defined as A -> B -> C -> D 2.0 and A -> E -> D 1.0, then D 1.0 will be used when building A because the path from A to D through E is shorter. You could explicitly add a dependency to D 2.0 in A to force the use of D 2.0.
根據依賴深度,選擇依賴路徑最近的package version, 若是依賴深度相同,那麼選擇前一個。Note that if two dependency versions are at the same depth in the dependency tree, the first declaration wins.
依賴管理(項目做者可直接指定依賴版本)