2012-01-28 4 views
44

Я создал простой проект из maven-achetype-quickstart в Eclipse Indigo, затем я перешел к редактору gui pom.xml и на вкладке зависимостей добавлена ​​зависимость log4j от пользователя выполните поиск в соответствующем диалоговом окне. Теперь мой pom.xml выглядитОтсутствует артефакт com.sun.jdmk: jmxtools: jar: 1.2.1

<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 xsd/maven-.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>mygroup</groupId> 
    <artifactId>Test_Maven_03</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Test_Maven_03</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.15</version> 
    </dependency> 
    </dependencies> 
    <dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
    </dependency> 
</dependencies> 
    </dependencyManagement> 
</project> 

Eclipse, говорит, что мой POM имеет много проблем, как

отсутствующего артефакт javax.jms: Jms: банка: 1,1 pom.xml/Test_Maven_03 линия 2 Maven зависимости Проблема

Что это значит и как увидеть функцию maven для автоматической загрузки jar.

EDIT 1 Если я выбираю log4j 1.2.16 вместо 1.2.15, я получаю другую ошибку: Missing artifact log4j:log4j:bundle:1.2.16. Поэтому я не вижу автоматического управления банками.

+0

SBT users: '' 'libraryDependencies + =" log4j "%" log4j "%" 1.2.15 "exclude (" javax.jms "," jms ")' '' – opyate

ответ

92

Это не включено больше из-за проблем с лицензированием, если я правильно помню. Если вам не нужна функциональность JMS можно исключить из JMS log4j зависимости:

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.15</version> 
<exclusions> 
    <exclusion> 
     <groupId>com.sun.jmx</groupId> 
     <artifactId>jmxri</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.sun.jdmk</groupId> 
     <artifactId>jmxtools</artifactId> 
    </exclusion> 
    <exclusion> 
      <groupId>javax.jms</groupId> 
      <artifactId>jms</artifactId> 
    </exclusion> 
</exclusions> 
</dependency> 
+1

Я не хочу этого делать. Я думал, что Maven будет обрабатывать банки автоматически. Без Maven я просто скачал бы log4j jar и поместил бы его в classpath. С Maven я должен догадаться о лицензировании ... –

+0

Maven загрузит зависимые баночки для вас и поместит его в путь класса, но этот банку был удален из репозитория, посмотрите этот пост: http://stackoverflow.com/questions/4908651/help-the-following-artifacts-could-not-be-resolved-javax-jmsjmsjar1-1 – Sbhklr

+0

@SuzanCioc Не совсем верно; зависимость - это зависимость, независимо от того, управляете ли вы ею вручную или позволяете чему-то другому управлять ею. Хотя я не уверен, почему он жалуется на недостающую зависимость; он должен получить его из пакета geronimo. –

11

Использование Log4J 1.2.16 (the one I linked to in your earlier question); он не имеет более старой зависимости JMX и получает ее от Geronimo.

+0

Сначала я попробовал 1.2.16, но вы получили еще одну ошибку («Отсутствует артефакт log4j: log4j: bundle: 1.2.16»). Вот почему я начал пробовать другие версии. Во всяком случае, я не вижу здесь никакой автоматизации. Если Maven обеспечит такую ​​автоматизацию, он скажет все о зависимостях ИМХО. –

+0

@SuzanCioc С [this pom.xml] (https://gist.github.com/1695599) и Maven 3 работает нормально; вы разбиваете материал на два куска, потому что я не могу сказать. Просто потому, что вы в настоящее время не можете заставить Maven работать, это не значит, что он не работает. –

+0

@SuzanCioc Он отлично работает с вашим помпом. –

36

Измените версию log4j на 1.2.16.

Метаданные для 1.2.15 являются плохими, как вы обнаружили, потому что в центральном репозитории отсутствуют зависимости. Тем не менее, в центральном хранилище maven существует политика изменения артефактов или метаданных, поскольку это может привести к неповторимости сборок. То есть сборка может вести себя по-разному, если артефакт или его метаданные изменились.

Причина в том, что лучше работать с плохими метаданными, чем создавать невоспроизводимые сборки.

Лучше, конечно, если разработчики проектов будут более осторожны с метаданными, которые они загружают в центральный.

+0

Я новичок в Maven и думал, что он обеспечивает автоматическое управление зависимостями JAR. Но, как я вижу, это не так. Если я выберу 1.2.16, я получу еще одну ошибку (сейчас отредактирую мой пост). Так в чем же цель Maven? Разве не легче загружать баночки вручную, чем полицейское расследование, когда каждый Мэфен поднимается? –

+0

@SuzanCioc Нет никакого способа сделать ручное управление транзитивной зависимостью легче, чем с помощью инструмента; не смешно. Реальный проект может иметь сотни зависимостей - как вы будете отслеживать эти зависимости вручную? Когда вы что-то обновляете ?! Это * 100% * эффективно? Не всегда. Geez. –

+0

Итак, нет простого способа увидеть работу Maven? Это видно только в случае сотен банок, верно? –

1

Ответы выше (исключая JMX) являются точными, если вам не нужны какие-либо зависимости JMX. Однако вы никогда не сможете загружать файлы .jar зависимостей JMX из стандартного репозитория maven. Цитирую Jörg Schaible-3 at nabble.com:

This is normal and it will stay so, because Sun/Oracle never granted distribution rights for those artifacts as separate downloads. You will have to download them from Oracle, accepting their license, and add them to a local repository manager.

Поэтому, если вы хотите использовать JMX, вам необходимо скачать соответствующую папку JMX зип из Oracle's website.