Maven JarClassLoader: Предупреждение: Foo.class в X.jar скрыт Y.jar (с другим байт-кодом)

1

Как только я добавила поддержку java.mail в свой проект:

     <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>

Я начал получать поток предупреждающих сообщений, подобных этим (когда я запускаю встроенную банку):

JarClassLoader: Warning: javax/mail/Address.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode)
JarClassLoader: Warning: javax/mail/AuthenticationFailedException.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with differ
ent bytecode)
JarClassLoader: Warning: javax/mail/Authenticator.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode)
JarClassLoader: Warning: javax/mail/BodyPart.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode)
JarClassLoader: Warning: javax/mail/EventQueue.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode)
JarClassLoader: Warning: javax/mail/FetchProfile$Item.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode
)

Моя программа отлично работает (и отправляет письмо в порядке), но я не хочу, чтобы все эти сотни предупреждений JarClassLoader...

Любая идея, как восстановить мир и спокойствие в моем консольном журнале?


Обновление: благодаря подсказке Джигара Джоши ниже, я обнаружил, что нежелательный geronimo-javamail_1.4_spec-1.7.1.jar происходит от org.apache.cxf: cxf-api: jar: 2.7.1: скомпилировать, поэтому я добавил исключение:

   <dependency> 
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-api</artifactId>
        <version>2.7.1</version>
        <exclusions>
          <exclusion>  
           <groupId>org.apache.geronimo.specs</groupId>
           <artifactId>geronimo-javamail_1.4_spec</artifactId>
         </exclusion>
       </exclusions> 
    </dependency>

И команда mvn dependency:tree больше не показывает "geronimo" в качестве зависимости, но я все еще получаю все эти предупреждения, когда запускаю вновь созданный банку (построен из чистого!)

Дополнительные предложения?


Обновление 2: это раздел зависимостей в моем pom.xml:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>


  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>2.7.1</version>
    <type>jar</type>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.7.1</version>
    <type>jar</type>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.0.7.RELEASE</version>
  </dependency>


  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.26</version>
  </dependency>
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.6.Final</version>
  </dependency>
  <dependency> 
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-api</artifactId>
    <version>2.7.1</version>
    <exclusions>
      <exclusion>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-javamail_1.4_spec</artifactId>
      </exclusion>
    </exclusions> 
  </dependency>
  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.7.1</version>
    <type>jar</type>
  </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>

  <dependency> 
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.1</version>
  </dependency>
  <dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
  </dependency>

</dependencies>
Теги:
maven
pom.xml
geronimo
javax.mail

1 ответ

2

Это предупреждение говорит о том, что у вас есть один и тот же класс из нескольких банок, что может вызвать проблемы во время выполнения

например:

JarClassLoader: Warning: javax/mail/EventQueue.class in lib/mail-1.4.1.jar is hidden by lib/geronimo-javamail_1.4_spec-1.7.1.jar (with different bytecode)

Я предполагаю, что вы ищете этот класс из mail-1.4.1.jar а не из geronimo-javamail_1.4_spec-1.7.1.jar например

Вам нужно будет исключить этот ненужный банку, чтобы он не стал доступен в пути к классам, либо с помощью <exclusions> либо <optional>, он может исходить из другой зависимости jar

выполнить mvn dependency:tree чтобы отследить его от того, где он прибывает, и <exclude> it


Также см

  • 0
    Вы предполагаете правильно, большое спасибо за mvn dependency:tree вершина mvn dependency:tree . Этот нежелательный файл geronimo-javamail jar поступает из / с org.apache.cxf:cxf-api:jar:2.7.1:compile . Я определенно хочу исключить. Я скоро проверю, как это сделать.
  • 1
    maven.apache.org/guides/introduction/...
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню