Maven ведет войну с двумя версиями одной и той же банки - PullRequest
5 голосов
/ 14 сентября 2010

Maven помещает и axis-1.3.jar, и axis-1.4.jar в WEB-INF / lib моей войны.Может кто-нибудь объяснить, как заставить его использовать только axis-1.4.jar?

<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">
    <parent>
        <groupId>dummy</groupId>
        <artifactId>test-war</artifactId>
        <version>0.1</version>
    </parent>

  <modelVersion>4.0.0</modelVersion>
  <groupId>dummy</groupId>
  <artifactId>war-part2</artifactId>
  <name>war-part1</name>
  <version>0.1</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>com.jaspersoft.jasperserver</groupId>
      <artifactId>jasperserver-ireport-plugin</artifactId>
      <version>2.0.1</version>
    </dependency>
  </dependencies>
</project>

[зависимость: дерево {выполнение: default-cli}]

+- org.apache.axis:axis:jar:1.4:compile
\- com.jaspersoft.jasperserver:jasperserver-ireport-plugin:jar:2.0.1:compile
   +- javax.activation:activation:jar:1.1:compile
   +- javax.mail:mail:jar:1.4:compile
   +- log4j:log4j:jar:1.2.12:compile
   \- com.jaspersoft.jasperserver:jasperserver-common-ws:jar:2.0.1:compile
      +- xerces:xercesImpl:jar:2.8.1:compile
      |  \- xml-apis:xml-apis:jar:1.3.03:compile
      \- axis:axis:jar:1.3:compile
         +- axis:axis-jaxrpc:jar:1.3:compile
         +- axis:axis-saaj:jar:1.3:compile
         +- wsdl4j:wsdl4j:jar:1.5.1:compile
         +- commons-logging:commons-logging:jar:1.0.4:compile
         \- commons-discovery:commons-discovery:jar:0.2:compile

Maven равен 2.2.1

Ответы [ 4 ]

8 голосов
/ 14 сентября 2010

Теоретически, Maven должен обрабатывать конвергенцию версии артефакта, присутствующего в зависимостях или транзитивных зависимостях. Проблема здесь в том, что axis-1.4.jar и axis-1.3.jar не имеют одинаковых groupId (org.apache.axis против axis), поэтому Maven видит их как отдельные артефакты и включает их обоих.

Если вы не хотите получать axis-1.3.jar, а только axis-1.4.jar, вам придется исключить нежелательное из зависимости jasperserver-ireport-plugin явно, используя exclusion:

<dependency>
  <groupId>com.jaspersoft.jasperserver</groupId>
  <artifactId>jasperserver-ireport-plugin</artifactId>
  <version>2.0.1</version>
  <exclusions>
    <exclusion>
      <groupId>axis</groupId>
      <artifactId>axis</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Не могу сказать, будет ли jasperserver-ireport-plugin работать с axis-1.4.jar.

6 голосов
/ 14 сентября 2010

Вы можете исключить некоторые зависимые библиотеки в ваших зависимостях:

<dependency>
  <groupId>com.jaspersoft.jasperserver</groupId>
  <artifactId>jasperserver-ireport-plugin</artifactId>
  <version>2.0.1</version>
  <exclusions>
    <exclusion>
      <groupId>axis</groupId>
      <artifactId>axis</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Тогда maven пропустит эту зависимость.

Вы должны быть уверены, что Jasper может найти необходимые классы в библиотекеВы предоставляете.

4 голосов
/ 14 сентября 2010

Это происходит на работе все время и в 90% случаев это происходит из-за того, что кто-то (or Eclipse's WTP) помещает копию фляги в WEB-INF/lib и затем проверяет ее в системе контроля версий.

Возможно, вы захотите это проверить.

0 голосов
/ 21 июля 2015

Между прочим, я несколько часов стучал по maven, потому что в моей войне были другие версии того же фляги - всегда будьте осторожны при рекурсивном удалении, но именно это и очистило в конце

rm -fR ~/.m2/repository
mvn -U clean package

что-то дурацкое в моем репо, но что бы это ни было, оно продолжало возвращаться, пока я не сделал принудительное обновление -U

Надеюсь, это кому-нибудь поможет

...