Maven2 for exchange dependencies between parents and children (without overriding dependencies in children)

With maven1, I used the expand tag to tell my child project to use their parent configuration.

All dependencies declared in the parent object were available in extension projects (children).

Now with maven2 I am using the inheritance / composition function and I have to redefine my dependencies (minus the version number) in each child project. (see how-to-share-common-properties-among-several-maven-projects )

Is there any way to tell maven that I want to share some of my addictions among all my children?

+4
source share
1 answer

Now with maven2 I am using the inherit / build function and I have to redefine my dependencies (minus version number) in each child project

No no. Dependencies declared in the parent pom are inherited.

Is there any way to tell maven that I want to share some of my addictions among all my children?

Just declare the <parent> element in the child POMs. For example, with this parent 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my.group.id</groupId> <artifactId>parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>Demo - Parent</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <modules> <module>child</module> </modules> </project> 

And this POM for the child module:

 <?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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>my.group.id</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <name>Demo - Child</name> <artifactId>child</artifactId> <packaging>jar</packaging> </project> 

The junit dependency is inherited as expected:

  $ mvn dependency: tree 
 [INFO] Scanning for projects ...
 [INFO] Searching repository for plugin with prefix: 'dependency'.
 [INFO] ----------------------------------------------- -------------------------
 [INFO] Building Demo - Child
 [INFO] task-segment: [dependency: tree]
 [INFO] ----------------------------------------------- -------------------------
 [INFO] [dependency: tree {execution: default-cli}]
 [INFO] my.group.id:child:jar:1.0-SNAPSHOT
 [INFO] \ - junit: junit: jar: 3.8.1: test
 [INFO] ----------------------------------------------- -------------------------
 [INFO] BUILD SUCCESSFUL
 [INFO] ----------------------------------------------- -------------------------
 ...

I suspect you are declaring dependencies in the <dependencyManagement> section (which has a different purpose).

+12
source

Source: https://habr.com/ru/post/1315181/


All Articles