Maven中dependency和plugins的繼承與約束
Maven的父子專案
父子專案核心點是在於通過將一個大專案拆分為若干子模組,每個模組以子專案的形式存在,不同的子專案共享父專案的設定與約束。所以,父專案承擔的角色是建立各個子專案的約束和一致的基礎。
父專案配置
<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.parent.project</groupId>
<artifactId>project-artifiact</artifactId>
<version>0.0.1.7-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- dependency in inheritance -->
<depdencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
<!-- depdency constraints -->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactid>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactid>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- plugin constraints -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<modules>
<module>A</module>
<module>B</module>
</modules>
在父專案中,其packaging值設定為pom,表示其定義為定義和描述專案的結構,而非真實的專案。
子專案定義
<?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>
<parent>
<artifactId>parent-project</artifactId>
<groupId>com.parent.project</groupId>
<version>0.0.1.7-SNAPSHOT</version>
</parent>
<artifactId>child-project</artifactId>
<version>0.0.1.7-SNAPSHOT</version>
<packaging>jar</packaging>
...........
dependencies
在上述示例中,定義了dependencies的節點,這個節點中定義的dependency將被其子專案繼承,可以在子專案預設載入進來。
dependencyManagement
在此節點中定義的dependency對於子專案而言,有版本上的約束,在子專案中,如果有指定版本,則預設使用父專案中約定的版本。
示例:
<dependency>
<groupId>junit</groupId>
<artifactid>junit</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactid>log4j</artifactId>
</dependency>
其版本號預設使用父專案的版本號
pluginManagement
在此節點中定義的dependency對於子專案而言,有版本上的約束,在子專案中,如果有指定版本,則預設使用父專案中約定的版本。
示例:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
</plugins>
其預設使用父專案中規定的版本號。當然在子專案中也可以覆蓋父專案中的版本約定,自行指定所需要的版本號。
總結
在父子專案結構中,子專案以modules的形式在父專案中註冊,子專案實施具體的實現功能。對於不同的子專案共享父專案中的設定與約束,方便團隊開發。
相關文章
- Maven 聚合與繼承Maven繼承
- TS中特殊型別-any、unknown、never和extends繼承約束、keyof的使用型別繼承
- idea maven中lifecycle 和 plugins的區別IdeaMavenPlugin
- 多繼承 與 多重繼承繼承
- JS中的繼承與原型鏈JS繼承原型
- JavaScript中的繼承和組合JavaScript繼承
- Python中的繼承和多型Python繼承多型
- day-25-類的繼承順序-父類對子類的約束-多型-佇列和棧繼承多型佇列
- ES6中的類繼承和ES5中的繼承模式詳解繼承模式
- Maven中的dependency的scope作用域詳解Maven
- Java中的類繼承與多型Java繼承多型
- C++中公有繼承、保護繼承、私有繼承的區別C++繼承
- Solidity中的繼承Solid繼承
- java中的繼承Java繼承
- PostgreSQL中的繼承SQL繼承
- JavaScript中的繼承JavaScript繼承
- JS中的繼承JS繼承
- 聊聊iOS中的多繼承和多重代理iOS繼承
- C#中繼承和多型的研究C#中繼繼承多型
- 原型和繼承原型繼承
- 類的繼承和派生繼承
- javascript的原型和繼承JavaScript原型繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- es5繼承和es6類和繼承繼承
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數
- C++中的繼承C++繼承
- 聊聊JS中的繼承JS繼承
- JS中的繼承(下)JS繼承
- JS中的繼承(上)JS繼承
- olidity語言開發以太坊智慧合約中的繼承繼承
- JavaScript 的繼承與多型JavaScript繼承多型
- Javascript的繼承與多型JavaScript繼承多型
- 繼承與多型繼承多型
- 好程式設計師前端教程css中可被繼承和不可被繼承的屬性程式設計師前端CSS繼承
- OOP的多型和繼承OOP多型繼承
- CSS的繼承和使用方式CSS繼承
- JS的原型鏈和繼承JS原型繼承
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型