Отсутствует артефакт com.sun: tools: jar - PullRequest
73 голосов
/ 04 декабря 2011

Я следовал руководству по началу работы, но застрял после того, как импортировал проект playn с помощью Maven.Я использую Eclipse Indigo, работающую на 64-битной Windows 7.

Все импортированные проекты имеют одинаковую ошибку:

Missing Artifact com.sun:tools:jar in all the pom.xml files.

После нескольких часов поиска по форумам, которые я пробовал:

Установка последней версии Java 1.6.029. Изменение переменной окружения JAVA_HOME на значение \program files\Java\jdk1.6_029 Изменение настроек Java в Eclipse для использования JRE jdk1.6_029.

. Я бы очень хотел поэкспериментировать с playn,но почему есть несколько постов, я не могу найти единодушного ответа на решение.Некоторые люди говорят, что Sun удалила что-то из 64-битного jdk, другие говорят, что вы должны отредактировать свои xml-файлы, многие люди сказали, что вы изменили свой JAVA_HOME, а другой сказал, что вам нужно изменить параметры виртуальной машины для Eclipse.

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

(правка) Вот pom.xml в первом проекте.Eclipse отмечает ошибку в строке, которая гласит:

<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">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.googlecode.playn</groupId>
    <artifactId>playn-project</artifactId>
    <version>1.1-SNAPSHOT</version>
  </parent>

  <artifactId>playn-android</artifactId>
  <name>PlayN Android</name>
  <packaging>jar</packaging>

  <repositories>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-core</artifactId>
      <version>${project.version}</version>
    </dependency>

    <!-- needed because Android uses the same JSON code as playn-java;
         that should be factored into a library shared by both backends -->
    <dependency>
      <groupId>com.googlecode.playn</groupId>
      <artifactId>playn-java</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>${android.version}</version>
      <scope>provided</scope>
    </dependency>

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

  <build>
    <sourceDirectory>src</sourceDirectory>
  </build>
</project>

Ответы [ 20 ]

53 голосов
/ 18 января 2012

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

У меня была такая же проблема при использовании Eclipse в Windows 7, даже когда я удалил JRE из списка JRE в настройках Eclipse и просто имел JDK там.

Что мне в итоге пришлось сделать (как вы упомянули в своем вопросе), так это изменить командную строку для ярлыка, который я использую для запуска Eclipse, чтобы добавить к нему аргумент -vm следующим образом:

-vm "T:\Program Files\Java\jdk1.6.0_26\bin"

Конечно, вы должны настроить его так, чтобы он указывал на каталог bin вашей JDK-инсталляции. Это приводит к тому, что сам Eclipse запускается с использованием JDK вместо JRE, а затем он может правильно найти tools.jar.

Я считаю, что это связано с тем, как Eclipse находит JRE по умолчанию, когда ничего не указано. Я предполагаю, что это имеет тенденцию предпочитать JRE по сравнению с JDK (почему, я не знаю) и идет к первой совместимой JRE, которую он находит. И если он выходит из ключей реестра Windows, как предполагает ответ Владиатора, он сначала ищет ключ HKLM\Software\JavaSoft\Java Runtime Environment вместо ключа HKLM\Software\JavaSoft\Java Development Kit.

23 голосов
/ 02 сентября 2012

У меня была такая же проблема при разработке простого приложения веб-службы, в моем случае мне пришлось добавить плагин codehous для получения библиотек jaxws.Тем не менее, Maven Pom продолжал спрашивать о файле JAR инструментов.

Я должен сказать, что вышеприведенные комментарии верны, вы можете включить следующую запись в файл pom:

<dependency>
   <groupId>com.sun</groupId>
   <artifactId>tools</artifactId>
   <version>1.6</version>
   <scope>system</scope>
   <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath>
 </dependency>

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

Я нашел другое решение в комментарии StackOverflow:

Проблема артефактов Maven 3

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>${struts2.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>
</dependency>

Они предлагают включить исключение для jar инструмента, и это работает.Итак, подведем итог: вы можете включить исключающее правило в свою зависимость и избежать проблемы tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
22 голосов
/ 06 декабря 2011

Я столкнулся с той же проблемой, и я смог решить ее путем добавления местоположения зависимости tools.jar в pom.xml. Вот так:

 <dependency>
   <groupId>com.sun</groupId>
   <artifactId>tools</artifactId>
   <version>1.6</version>
   <scope>system</scope>
   <systemPath>C:\Program Files\Java\jdk1.6.0_29\lib\tools.jar</systemPath>
 </dependency>

Убедитесь, что вы изменили <systemPath> на то место, где находится ваш файл tools.jar.

14 голосов
/ 30 сентября 2015

Ни один из других ответов не сделал это для меня.Что нужно было сделать, чтобы проверить «иерархию зависимостей» pom.xml в eclipse, где предоставление фильтра «tools» показало, что у меня есть реальная зависимость от tools.jar:

Eclipse View

Итак, виновником для меня было следующее:

<dependency>
    <groupId>com.github.markusbernhardt</groupId>
    <artifactId>robotframework-selenium2library-java</artifactId>
    <version>1.4.0.7</version>
    <scope>test</scope>
</dependency>

Добавление исключения исправило это:

<dependency>
    <groupId>com.github.markusbernhardt</groupId>
    <artifactId>robotframework-selenium2library-java</artifactId>
    <version>1.4.0.7</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>  
</dependency>

Похоже, исключение не имеетнедостатки к нему.

6 голосов
/ 04 октября 2013

Я решил эту проблему в настройках Eclipse 4.3 - только путем добавления библиотек JDK в библиотеки JRE.

Перейти Windows -> Настройки -> Java -> Установленные JRE -> Выбрать JDK и нажать Редактировать -> Нажмите ДобавитьВнешние файлы JAR и добавьте tools.jar (помещается в JDK / lib)

5 голосов
/ 10 марта 2013

То же самое со мной и Windows 7. В итоге я добавил две строки к eclipse.ini:

-vm 
C:\Program Files\Java\jdk1.6.0_35\bin

Я пытался использовать %JAVA_HOME% там, но это не сработало.

4 голосов
/ 07 сентября 2016

Проверьте версию JDK на вашем компьютере и в pom.xml оба должны быть одинаковыми

<dependency>
    <groupId>sun.jdk</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>C:\Program Files\Java\jdk1.8.0_192\lib\tools.jar</systemPath>
</dependency>
3 голосов
/ 25 марта 2014

Поработав некоторое время, я наконец-то заставил это работать с eclipse.ini вместо командной строки. После прочтения документации я понял, что аргумент -vm должен быть в отдельной строке, без кавычек и перед любым -vmargs:

-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe
1 голос
/ 08 мая 2018

Я получил похожую ошибку. Это потому, что JDK не правильно установлен в Eclipse. Для Cucumber требуется JDK вместе с JRE, поэтому добавьте ниже зависимость в вашем pom.xml

<dependency>
  <groupId>com.sun</groupId>
  <artifactId>tools</artifactId>
  <version>1.6</version>
  <scope>system</scope>
  <systemPath>C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar</systemPath>
</dependency>
1 голос
/ 30 июля 2015

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

Eclipse 4.5 требует как минимум Java 7 для выполнения, поэтому ямоя система настроена на использование Java 8 JRE, расположенного в C: \ java \ jre1.8.0_45.

Далее я использую файл POM, который предполагает, что я работаю с Java 6JDK.

  <profiles>
    <profile>
      <id>default-profile</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <file>
          <exists>${java.home}/../lib/tools.jar</exists>
        </file>
      </activation>
      <properties>
        <toolsjar>${java.home}/../lib/tools.jar</toolsjar>
      </properties>
    </profile>
    <profile>
      <id>osx_profile</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <os>
          <family>mac</family>
        </os>
      </activation>
      <properties>
        <toolsjar>${java.home}/../Classes/classes.jar</toolsjar>
      </properties>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.6.0</version>
      <scope>system</scope>
      <systemPath>${toolsjar}</systemPath>
    </dependency>
  </dependencies>

Мне не разрешено изменять POM-файл, поэтому мне пришлось поиграть в некоторые покерные игры.Я скопировал tools.jar из моего Java 6 JDK, создал каталог C: \ java \ lib и вставил его туда.Затем я перезапустил затмение и очистил свой проект.И ошибки VOILA исчезли.

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

...