Отсутствует артефакт "sun.jdk: jconsole: jar: jdk"

При добавлении Arquillian в сборку Maven я получаю исключение выше в Eclipse:

Отсутствует артефакт sun.jdk: jconsole: jar: jdk

    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <version>1.1.7.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.extension</groupId>
        <artifactId>arquillian-persistence-dbunit</artifactId>
        <version>1.0.0.Alpha7</version>
    </dependency>

(Сообщение не является проблемой, но Eclipse отказывается скомпилировать проект из-за этого. Maven работает, хотя.)

Естественно, первое, что я сделал, это попытаться исключить его из зависимостей Maven (wildfly-arquillian-container-managed - это то, где дерево зависимостей заявляет, что зависимость исходит):

    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-arquillian-container-managed</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>jconsole</artifactId>
                <groupId>sun.jdk</groupId>
            </exclusion>
        </exclusions>
    </dependency> 

Не было никаких изменений. Я попытался запустить Eclipse с помощью -vm C:\Program Files\Java\jdk1.8.0_60\bin. И попытался отредактировать JDK в "Предпочтениях → Установленные JRE", чтобы содержать JAR в каталоге инструментов. Но ничего не работает.

Что я могу сделать?

Ответ 1

Я помещаю свои зависимости таким образом, и он отлично работает:

<dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-arquillian-container-embedded</artifactId>
        <version>8.1.0.CR1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.15</version>
        <scope>test</scope>
    </dependency>
    <!-- Arquillian -->

    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-embedded</artifactId>
        <version>8.1.0.CR1</version>
        <exclusions>
            <exclusion>
                <groupId>sun.jdk</groupId>
                <artifactId>jconsole</artifactId>
            </exclusion>
        </exclusions>
        <scope>test</scope>
    </dependency>

Посмотрите, что тег исключения находится в зависимостях "wildfly-embedded"...

Не забудьте указать команду "mvn install" и нажать правую кнопку в проекте и "Maven Update", если она не работает, попробуйте удалить папку "~/.m2/repository" и снова загрузить все зависимости.

Ответ 2

Аластер, спасибо за решение проблемы. Причина кроется в pom переходной зависимости org.wildfly:wildfly-cli (8.2.0.Final). Там вы можете найти следующее объявление зависимости:

<dependency>
            <groupId>sun.jdk</groupId>
            <artifactId>jconsole</artifactId>
            <version>jdk</version>
            <scope>system</scope>
            <systemPath>${java.home}/../lib/jconsole.jar</systemPath>
</dependency>

На самом деле, jar находится в ${java.home}/lib/jconsole.jar.

PS: версии тоже недостаточно. Итак, я удалил эту версию из моего локального репозитория maven.

Ответ 3

Я столкнулся с этим во время работы на компьютере с Windows. Сам проект отлично работал на моей машине Ubuntu. Однако сбор проекта не удался именно с этим сообщением, вызванным переходной зависимостью org.wildfly:wildfly-ejb.

Отсутствует артефакт sun.jdk: jconsole: jar: jdk

Я не чувствовал, что необходимо изменить конфигурацию проекта, поскольку она должна работать нормально во всех средах, и, следовательно, сама среда Windows, должно быть, была неправильной. Моя первая мысль заключалась в том, что сам Eclipse каким-то образом использует JRE вместо JDK.

Итак, я проверил java -version в CMD и, похоже, указал на JRE, установленную где-то в папке /Program Files, в то время как я всегда вручную устанавливал JDK в папке /Java. Затем я проверил переменную среды %PATH% в настройках Windows. Он, как представляется, включает /ProgramData/Oracle/Java/javapath. Эта папка содержала несколько символических ссылок в JRE в папке /Program Files. Это было фактически использовано для запуска Eclipse и выполнения всех его задач. Когда я удалил его (уже был JDK/bin дальше в настройке %PATH%) и перезапустил Eclipse и повторно выполнил сборку Maven, ошибка исчезла.

Никаких изменений, необходимых для конфигурации pom.xml или Eclipse. Просто следите за тем, какие Windows все устанавливают и обновляют для вас в фоновом режиме и проверяют ваш %PATH%, если он все еще имеет JDK в верхней части.

Ответ 4

Причина проблемы заключается в том, что jconsole.jar является частью jdk, поэтому он не распространяется как обычный пакет maven.

Как правило, проект pom.xml вставляет этот jconsole.jar как системный пакет, т.е. он даже не пытается загрузить их из центрального репозитория maven. Хотя это можно было бы распространять и на этом пути.

Простейшим решением проблемы является использование jdk, который содержит этот jconsole.jar.

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

Или вы также можете изменить pom.xml или установить пакет вручную в локальное репозиторий maven, так как остальные отвечают.

Ответ 5

Я провел большую часть дня, борясь с этой проблемой. Простое решение - вручную установить отсутствующую банку из вашего jdk, используя maven, что-то вроде:

c:\workspace\prism > mvn install: install-file -Dfile = C:\java\jdk\lib\jconsole.jar -DgroupId = sun.jdk -DartifactId = jconsole -Dversion = 1.8 -Dpackaging = war.

Кто знает, почему eclipse не может этого сделать...

Ответ 6

Возможно, это скорее обходное решение, чем правильное решение, так или иначе я решил эту проблему, удалив профиль "activebydefault" в pom. Таким образом, Eclipse не будет жаловаться на "Missing artifact sun.jdk: jconsole: jar: jdk", но тест JUnit не будет запускаться в Eclipse - поскольку я использую тестирование только из теста maven, а не для Eclipse, встроенного в JUnit, просто нужно указать, с каким идентификатором профиля вы хотите работать.

Ответ 7

Я столкнулся с той же проблемой, но ничего из этого не было для меня идеальным решением. Шаги для решения:

  1. Проверьте, правильно ли вы указываете на местоположение JDK: echo $ JAVA_HOME
  2. Откройте pom.xml из IDE (у меня есть затмение), выберите Иерархия зависимостей и выполните поиск jconsole. Если вы видите jconsole, то это потому, что иногда jconsole указывается как взаимозависимость, а указанный путь не может быть распознан. Исключая эту банку, мы решим проблему.

Иерархия зависимостей

Взаимозависимая jconsole

Исключая jconsole