English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Una delle caratteristiche fondamentali di Maven è la gestione delle dipendenze. Quando si gestiscono progetti a modulo multipli (che contengono centinaia o migliaia di moduli o sottoprogetti), le dipendenze tra i moduli diventano molto complesse e la gestione diventa difficile. In questo caso, Maven fornisce un metodo di controllo avanzato.
Una situazione abbastanza comune, ad esempio, A dipende da altre librerie B. Se un altro progetto C desidera utilizzare A, allora il progetto C deve utilizzare anche la libreria B.
Maven può evitare di cercare tutte le librerie necessarie. Maven legge i file del progetto (pom.xml), trovando le loro dipendenze tra i progetti.
Tutto ciò che dobbiamo fare è definire correttamente le dipendenze dirette in ogni pom del progetto. Tutto il resto lo farà Maven per noi.
Tramite le dipendenze trasmissibili, la grafica di tutte le librerie incluse aumenta rapidamente. Quando ci sono librerie duplicate, le situazioni che possono verificarsi aumentano costantemente. Maven fornisce alcune funzioni per controllare l'estensione delle dipendenze trasmissibili.
Funzione | Descrizione funzionale |
---|---|
Regolazione dipendenza | Determina quale versione di dipendenza sarà utilizzata quando più versioni create manualmente sono presenti contemporaneamente. Se due versioni di dipendenza hanno la stessa profondità nelbero delle dipendenze, la versione dichiarata per prima viene utilizzata. |
依赖管理 | Versione specificata manualmente utilizzata direttamente. Ad esempio, quando un progetto C contiene un modulo di gestione delle dipendenze per il progetto B, ovvero B dipende da A, allora A può specificare la versione utilizzata quando B viene richiamato. |
Intervallo di dipendenza | Dipendenze incluse in ogni fase del processo di costruzione. |
Esclusione dipendenza | Ogni dipendenza trasmissibile può essere esclusa utilizzando l'elemento "exclusion". Esempio: A dipende da B, B dipende da C. Pertanto, A può etichettare C come "escluso". |
Dipendenza opzionale | Ogni dipendenza trasmissibile può essere etichettata come opzionale utilizzando l'elemento "optional". Ad esempio: A dipende da B, B dipende da C. Pertanto, B può etichettare C come opzionale, così A non utilizzerà più C. |
La scoperta delle dipendenze trasmissibili può essere limitata utilizzando i seguenti intervalli di dipendenza:
Intervallo | Descrizione |
---|---|
Fase di compilazione | Questo intervallo indica che le dipendenze correlate sono valide solo nel percorso delle classi del progetto. Valore predefinito. |
Fase di fornitura | Questo intervallo indica che le dipendenze correlate sono fornite dal JDK in esecuzione o dal server di rete. |
Fase di esecuzione | Questo intervallo indica che le dipendenze correlate non sono necessarie durante la fase di compilazione, ma sono necessarie durante la fase di esecuzione. |
Fase di test | Questo intervallo indica che le dipendenze correlate sono necessarie solo durante la fase di compilazione e l'esecuzione del test. |
系统阶段 | 该范围表明你需要提供一个系统路径。 |
导入阶段 | 该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。 |
通常情况下,在一个共同的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。接下来的一个实例可以帮助你更好地理解这个概念。
接下来是上面依赖图的详情说明:
App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。
Root 是 App-Core-lib 和 App-Data-lib 的父项目。
Root 在它的依赖部分定义了 Lib1、lib2 和 Lib3 作为依赖。
App-UI-WAR 的 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.companyname.groupname</groupId> <artifactId>App-UI-WAR</artifactId> <version>1.0</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.companyname.groupname</groupId> <artifactId>App-Core-lib</artifactId> <version>1.0</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname</groupId> <artifactId>App-Data-lib</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
App-Core-lib 的 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"> <parent> <artifactId>Root</artifactId> <groupId>com.companyname.groupname</groupId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>App-Core-lib</artifactId> <version>1.0</version> <packaging>jar</packaging> </project>
App-Data-lib 的 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"> <parent> <artifactId>Root</artifactId> <groupId>com.companyname.groupname</groupId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.groupname</groupId> <artifactId>App-Data-lib</artifactId> <version>1.0</version> <packaging>jar</packaging> </project>
Root 的 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.companyname.groupname</groupId> <artifactId>Root</artifactId> <version>1.0</version> <packaging>pom</packaging> <dependencies> <dependency> <groupId>com.companyname.groupname1</groupId> <artifactId>Lib1</artifactId> <version>1.0</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname2</groupId> <artifactId>Lib2</artifactId> <version>2.1</version> </dependency> </dependencies> <dependencies> <dependency> <groupId>com.companyname.groupname3</groupId> <artifactId>Lib3</artifactId> <version>1.1</version> </dependency> </dependencies> </project>
Ora, quando costruiamo il progetto App-UI-WAR, Maven troverà tutte le dipendenze attraversando il grafo delle dipendenze e costruirà l'applicazione.
Attraverso l'esempio sopra riportato, possiamo imparare i seguenti concetti chiave:
Le dipendenze pubbliche possono essere raggruppate utilizzando il concetto di pom padre. Le dipendenze dei progetti App-Data-lib e App-Core-lib sono elencate nel progetto Root (vedere il tipo di pacchetto di Root, che è un POM).
Non c'è bisogno di dichiarare Lib1, lib2, Lib3 come dipendenze dell'App-UI-W. Maven realizza questo dettaglio utilizzando il meccanismo delle dipendenze trasportabili.