Maven2 разделяет зависимости между родителями и детьми (без переопределения зависимостей у детей) - PullRequest
4 голосов
/ 09 июля 2010

В maven1 я использовал тег extension , чтобы сообщить моим дочерним проектам использовать их родительскую конфигурацию.

Все расширения, объявленные в родительском объекте, были доступны в расширенных (дочерних) проектах.

Теперь с maven2 я использую функцию наследования / компоновки, и мне нужно повторно объявить мои зависимости (за вычетом номера версии) в каждом дочернем проекте. (см. как поделиться общими свойствами среди нескольких проектов )

Есть ли способ сказать maven, что я хочу поделиться некоторыми из моих зависимостей среди всех моих детей?

1 Ответ

12 голосов
/ 09 июля 2010

Теперь с maven2 я использую функцию наследования / компоновки, и мне нужно повторно объявить мои зависимости (за вычетом номера версии) в каждом дочернем проекте

Нет, вы не делаете,Зависимости, объявленные в родительском помпе, наследуются.

Есть ли способ сообщить maven, что я хочу поделиться некоторыми из моих зависимостей среди всех моих детей?

Просто объявите элемент <parent> в дочерних POM.Например, с этим родительским 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>

И этим 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>
  <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>

Зависимость junit наследуется, как и ожидалось:

$ 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] ------------------------------------------------------------------------
...

Я подозреваю, что вы объявляете зависимости в разделе <dependencyManagement> (который имеет другое назначение).

...