Отсутствует артефакт com.sun.jdmk: jmxtools: jar: 1.2.1
Я создал простой проект из maven-achetype-quickstart в Eclipse Indigo, затем я пошел в pom.xml gui editor и на вкладке зависимостей добавлена зависимость log4j
путем поиска в соответствующем диалоговом окне. Теперь мой pom.xml выглядит как
<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: jar: 1.1 pom.xml/Test_Maven_03 строка 2 Проблема зависимости Maven
Что это значит и как увидеть функцию maven для автоматической загрузки jar.
РЕДАКТИРОВАТЬ 1
Если я выбираю log4j 1.2.16 вместо 1.2.15, я получаю еще одну ошибку: Missing artifact log4j:log4j:bundle:1.2.16
. Поэтому я не вижу автоматического управления банками вообще.
Ответы
Ответ 1
Он больше не включается из-за проблем с лицензированием, если я правильно помню. Если вам не нужна функция 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>
Ответ 2
Измените версию log4j на 1.2.16.
Метаданные для 1.2.15 являются плохими, как вы обнаружили, потому что в центральном репозитории отсутствуют зависимости. Тем не менее, в центральном хранилище maven существует политика изменения артефактов или метаданных, поскольку это может привести к неповторимости сборок. То есть, сборка может вести себя по-разному, если артефакт или его метаданные изменились.
Причиной является то, что лучше работать с плохими метаданными, чем создавать невоспроизводимые сборки.
Лучше, конечно, если разработчики проектов будут более осторожны в отношении метаданных, которые они загружают в центральный.
Ответ 3
Используйте Log4J 1.2.16 (тот, с которым я связан в предыдущем вопросе); он не имеет более старой зависимости JMX и получает его от Geronimo.
Ответ 4
Ответы выше (исключая JMX) прекрасны, если вам не нужны какие-либо зависимости JMX. Однако вы никогда не сможете загружать файлы .jar зависимостей JMX из стандартного репозитория maven. Чтобы процитировать Jörg Schaible-3 на nabble.com:
Это нормально, и он останется таким, потому что Sun/Oracle никогда не предоставлял права распространения для этих артефактов как отдельные загрузки. У вас будет загрузить их из Oracle, принять их лицензию и добавить их в локальный менеджер репозитория.
Поэтому, если вы хотите использовать JMX, вам нужно будет загрузить соответствующую папку zmx zip из веб-сайт Oracle.