Там должен так или иначе исключить артефакты, наследованные от родительского АНГЛИЧАНИНА?

Артефакты от зависимостей могут быть исключены путем объявления <exclusions> элемент внутри a <dependency> Но в этом случае необходимо исключить артефакт, наследованный от родительского проекта. Выборка рассматриваемого АНГЛИЧАНИНА следует:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>jruby</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <artifactId>base</artifactId>
        <groupId>es.uniovi.innova</groupId>
        <version>1.0.0</version>
    </parent>

    <dependencies>      
        <dependency>
            <groupId>com.liferay.portal</groupId>
            <artifactId>ALL-DEPS</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</project>

base артефакт, зависит от javax.mail:mail-1.4.jar, и ALL-DEPS зависит от другой версии той же библиотеки. Вследствие того, что mail.jar от ALL-DEPS существуйте на среде выполнения, хотя не экспортируемый, сталкивается с mail.jar это существует на родителе, который ограничен по объему как compile.

Решение могло состоять в том, чтобы избавить от mail.jar от родительского АНГЛИЧАНИНА, но для большинства проектов, которые наследовали основу, нужна она (как переходная зависимость для log4j). Таким образом, то, Что я хотел бы сделать, должно просто исключить библиотеку родителя из дочернего проекта, поскольку это могло быть сделано если base была зависимость а не родительский англичанин:

...
    <dependency>
        <artifactId>base</artifactId>
        <groupId>es.uniovi.innova</groupId>
        <version>1.0.0</version>
        <type>pom<type>
        <exclusions>
          <exclusion>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
          </exclusion>
        </exclusions>
    </dependency>
...
113
задан Ahmed Ashour 12 April 2018 в 07:41
поделиться

2 ответа

Некоторые идеи:

  1. Возможно, в этом случае вы просто не могли бы наследовать от родителя (и объявить зависимость от база за исключением). Не удобно, если в родительском помпе много чего.

  2. Еще одна вещь, которую нужно проверить, - это объявить артефакт mail с версией, требуемой для ALL-DEPS , в dependencyManagement в родительском pom, чтобы заставить конвергенция (хотя я не уверен, что это решит проблему определения объема).

<dependencyManagement>
  <dependencies>
    <dependency>    
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>???</version><!-- put the "right" version here -->
    </dependency>
  </dependencies>
</dependencyManagement>
  1. Или вы можете исключить зависимость mail из log4j, если вы не используете функции, которые от него зависят (и это то, что я бы сделал):
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.15</version>
  <scope>provided</scope>
  <exclusions>
    <exclusion>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
    </exclusion>
    <exclusion>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
    </exclusion>
    <exclusion>
      <groupId>com.sun.jdmk</groupId>
      <artifactId>jmxtools</artifactId>
    </exclusion>
    <exclusion>
      <groupId>com.sun.jmx</groupId>
      <artifactId>jmxri</artifactId>
    </exclusion>
  </exclusions>
</dependency>
  1. Или вы можете вернуться к версии 1.2 .14 ​​в log4j вместо еретической версии 1.2.15 (почему они не пометили вышеупомянутые зависимости как optional ?!).
45
ответ дан 24 November 2019 в 02:44
поделиться

Вы пробовали явно объявить нужную вам версию mail.jar? Разрешение зависимостей Maven должно использовать это для разрешения зависимостей во всех других версиях.

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>jruby</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <artifactId>base</artifactId>
        <groupId>es.uniovi.innova</groupId>
        <version>1.0.0</version>
    </parent>
    <dependencies>          
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>VERSION-#</version>
            <scope>provided</scope>
        </dependency> 
        <dependency>
            <groupId>com.liferay.portal</groupId>
            <artifactId>ALL-DEPS</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</project>
6
ответ дан 24 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: