Відсутній артефакт com.sun: tools: jar


93

Я дотримувався підручника з початку роботи, але застряг після того, як імпортував проект 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 налаштувань Eclipse Java для використання 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>

Чи отримуєте ви таку ж помилку під час запуску maven із командного рядка?
Рагхурам,

Я додав файл pom.xml. Я перепрошую, що не знаю, як щось робити з maven за допомогою командного рядка.
boldinventions

POM зламаний. Відсутні обов’язкові теги, такі як groupId, artifactId, версія ... Батьківський POM - це також версія модуля, яка не існує в Maven central ....
Mark O'Connor

ти це якось виправив? Здається, нічого з цього не працює для мене (Windows7-64 bit - jdk1.6)
Овідіу Лацу,

Оскільки це поширене питання, чи можете ви прийняти відповідь, яка вам підходила?
Рой Truelove

Відповіді:


56

Я щойно розмістив це питання щодо цієї самої проблеми та того, як я її вирішив, але я також вставлю (і розширюю) її тут, оскільки це видається більш актуальним.

У мене була та сама проблема при використанні 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, як пропонується у відповіді Vladiat0r, він шукає HKLM\Software\JavaSoft\Java Runtime Environmentключ замість HKLM\Software\JavaSoft\Java Development Kitключа.


10
Це працювало для нас у Windows 7. Нам довелося змінити ярлик, щоб додати аргумент -vm "...", а не використовувати eclipse.ini. Крім того, нам довелося повторно імпортувати наш проект maven у робочу область, перш ніж помилка зникне.
Kit Menke

2
Те саме і тут - жодних кісток з .ini, але аргумент -vm у cmdline спрацював.
Рой Truelove

1
Я відредагував відповідь, щоб пояснити, як змінити eclipse.init. Джерело: wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example
OGrandeDiEnne

1
Те саме і тут - додавання -vm до ярлика у мене спрацювало. Мені не потрібно повторно імпортувати свій проект, досить було спроектувати / створити / оновити його.
kasukasz Dumiszewski

1
Щоб це працювало, мені потрібно було також додати javaw.exeдо цього шляху (так повністю -vm "T:\Program Files\Java\jdk1.8.0_66\bin\javaw.exe":);
Якоб ван Лінген,

27

У мене були такі ж проблеми під час розробки простого додатка веб-сервісу, у моєму випадку мені довелося додати кодовий плагін, щоб отримати бібліотеки jaxws. Однак Мевен Пом продовжував запитувати про файл 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>

Вони пропонують включити заяву про виключення для банки інструментів, і вона працює. Отже, підсумовуючи: ви можете включити правило виключення до своєї залежності та уникнути проблеми з tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>

3
Підказка: використовуйте 'mvn dependency: tree', щоб знайти, куди вставити ваше виключення.
Ларс,

Додавання тегу виключень у pom.xmlмене не працює.
user3437460

25

Я зіткнувся з тією ж проблемою, і я міг її вирішити, додавши розташування залежності 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.


42
Я настійно рекомендую цього не робити - це вирішує проблему, але не переноситься іншими розробниками або створює середовища. Подивіться інші відповіді, вони, здається, роблять фокус
Рой Truelove

можливо, краще змінити systemPath на <systemPath> $ {java.home} /lib/plugin.jar </systemPath>
Guilherme Santos

stackoverflow.com/questions/3080437/… знає , як це зробити портативно.
vorburger

Я божевільно змінюю свій pom.xml таким чином (примусово новішу версію java-md-doclet) помилка зникає: <dependencyManagement> <dependencies> <dependency> <groupId> com.github.iotaledger </groupId> <artifactId> java- md-doclet </artifactId> <version> 2.1.3 </version> </dependency> </dependencies> </dependencyManagement>
Самір 007,

20

Жодна з інших відповідей не зробила цього замість мене. Що було для перевірки на „ієрархію залежностей” pom.xml в eclipse, де надання фільтру „tools” показало, що я маю реальну залежність від tools.jar:

Затемнення подання

Тож винуватцем для мене було таке:

<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>

Здається, виключення не має жодних мінусів.


1
Працював для мене, виникла проблема оновлення кодової бази Java 6 до Java 8
jasonoriordan

Я визначив плагіна spotbugs-maven-plugin своїм винуватцем, дякую!
timbru31

8

Те саме зі мною та Windows 7. Я закінчив додаванням двох рядків до eclipse.ini:

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

Я намагався використовувати %JAVA_HOME%там, але це не спрацювало.


2
Примітка для майбутнього: це має бути перед -vmargsрядком, як будь-що минуле, що буде інтерпретовано як аргументи запуску VM. Отже: прямо перед цим!
eis

Це рішення, яке використовується -vmперед, -vmargsє ключовим !. Дякую!
Табер

6

Я вирішив цю проблему в налаштуваннях Eclipse 4.3 - лише додавши бібліотеки JDK до бібліотек JRE.

Зайдіть у вікна -> налаштування -> Java -> встановлені JRE -> виберіть JDK і натисніть Редагувати -> натисніть Додати зовнішні JAR-файли та додайте tools.jar (розміщений у JDK / lib)


5

Перевірте версію 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>

4

Якщо ця проблема все-таки трапляється, можливо, це пов’язано з JDK версії, що дорівнює або перевищує 11.

tools.jarАрхів був видалений з папки Lib в тих JDK (див ця відповідь на аналогічне питання). У такому випадку спробуйте використовувати інші версії бібліотек, які не покладаються на com.sun:toolsбібліотеку.


3

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

-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe

3

Я отримав подібну помилку. Це тому, що JDK неправильно встановлений у затемненні. Огірок потребує 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

На ефективній вкладці POM файлів pom я бачу такий шлях виведення: C:\Program Files\Java\jre6/../lib/tools.jar і я думаю, що це не дійсний шлях у Windows. Я спробував скопіювати tools.jar у папку jre6 / lib, а також у Java / lib без успіху.

Значення "C: \ Program Files \ Java \ jre6" надходить із реєстру

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_30
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6

І встановіть ключ JavaHome там, де встановлено ваш jdk JRE. Потім усі помилки компілятора зникли.

Повторна інсталяція JDK цього не виправила. Встановлення змінної системного середовища JAVA_HOME або java.home не допомогло.

Інша альтернатива, яку я бачив, - це додавання залежності з правильним шляхом до кожного файлу pom xml, але playn-sample має безліч файлів, що доводиться редагувати безглуздо.

Це ефективні результати POM, які показують НЕПРАВИЛЬНИЙ шлях!

 <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.6</version>
      <scope>system</scope>
      <systemPath>C:\Program Files\Java\jre6/../lib/tools.jar</systemPath>
      <optional>true</optional>
    </dependency>

1

Додайте цю залежність у файл pom.xml. Сподіваюся, це допоможе.
У <systemPath>властивості ви повинні написати свій шлях до jdk lib ..

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

1

Завершено за допомогою виправлення eclipse.ini:

openFile
-vm (Your Java Home JDK here)

Наприклад, -vm C:\Java\JDK\1.6 .

Також довелося змінити JRE на JDK:

В Eclipse IDE перейдіть до:

  1. Вікно -> Налаштування -> Встановлені JRE
  2. Натисніть Додати (щоб знайти новий JRE)
  3. Виберіть стандартний JVM -> далі
  4. Клацніть на Каталог, щоб знайти JRE додому, поставте JDK_INSTALL_LOCATION і закінчіть.
  5. Перейдіть до Властивості вашого проекту Java -> Шлях побудови Java -> Бібліотеки -> виберіть JRE -> Редагувати -> виберіть JRE робочої області за замовчуванням -> закінчити
  6. Проведіть повне очищення робочої області за допомогою проекту -> очистити.

У всіх наших екземплярах Windows Eclipse IDE є ця проблема. Усі середовища розробки середовищ Eclipse на базі Ubuntu для нас не впливають. Отже, ми використовували цей метод у примірниках Windows, і він виправляє наші проблеми. Не забудьте додати розрив рядка після -vm, помістіть шлях Java SDK на рядок Nect та розмістіть усі нещодавно додані -vmпрапорці перед --vmargsу eclipse.iniфайлі.
tom_mai78101

1

Як зазначають інші афіші, тут проблема пов’язана з JRE, який eclipse використовує, не маючи можливості знайти банку інструментів. Я вирішив цю проблему, пішовши трохи в іншому напрямку, ніж зазначено вище, і це було пов’язано з тим, як працювали мої проекти та середовище.

Eclipse 4.5 вимагає щонайменше Java 7 для виконання, тому я налаштував систему на використання Java 8 JRE, розташованої за адресою C: \ java \ jre1.8.0_45.

Далі я використовую файл POM, який передбачає, що я працюю з Java 6 JDK.

  <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 і вставив його туди. Потім я перезапустив eclipse і очистив свій проект. І помилки VOILA зникли.

Це не елегантне рішення, і я вважаю, що правильним рішенням було б змінити спосіб налаштування POM, але оскільки я не зміг, це працює.


1

Якщо ви бачите це в нещодавно встановленій / оновленій операційній системі, це просто тому, що JAVA_HOME встановлено неправильно.

нам потрібно правильно встановити JAVA_HOME. Наприклад на mac: якщо я хочу використовувати java версії 1.8.0_261

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`

0

У мене була така сама проблема на Windows 7 та Eclipse 3.7. Мені вдалося її виправити, запустивши

eclipse.exe -vm "D: \ JDK6 \ bin"

Ви можете запустити cmd і запустити eclipse таким чином, або можете відредагувати ярлик і додати -vm "D: \ JDK6 \ bin" як аргумент у "цільовому розділі".

Як сиденот, я також намагався додати -vm "D: \ JDK6 \ bin" до eclipse.ini, але не працював. І додавання JRE6 не буде працювати, оскільки він НЕ містить tools.jar у своєму каталозі "lib". Це робить лише JDK.


0

Спробувавши все вищесказане, у мене все ще була та сама проблема.

  • Змінна середовища PATH вказує на JDK 1,7 \ bin
  • Мою змінну середовища JAVA_HOME вказали на JDK 1.7
  • У моєму eclipse.ini запис javaw -vm вказував на JDK 1.7
  • У моєму уподобанні eclipse був встановлений JDK 1.7 як JRE.
  • Шлях мого побудови проекту використовував JDK 1.7.

Потім я спробував наступне,

  • Відкрийте командний рядок і введіть java -version. Це показало мені JRE версії 1.8.

  • Відкрийте командний рядок і перейдіть до розташування каталогу бінів JDK 1.7 та введіть java -version. Цього разу він показав правильно 1.7.

Потім, порившись у кількох місцях, я виявив, що крім вищезазначених місць є додаткові місця для роботи Java.

Реєстр

Існує також розділ реєстру, де вказано розташування JRE

HKLM \ Software \ Javasoft \ Version

Я змінив записи тут, щоб вказати на JDK 1.7

Дані програми

Каталог "C: \ ProgramData \ Oracle \ Java \ javapath" присутній у змінній середовища PATH і містить ярлики до Java, javaw тощо ... Ціллю цих ярликів були всі JRE 1.8. ( Це, на мою думку, було основною проблемою ) Я змінив ярлики, щоб вказати на правильні файли JDK exe.

Як тільки все це було зроблено. Я відкрив eclipse, всі помилки jdk.tools pom.xml зникли.


0

У мене ця проблема, і виявляється, що JBossDevStudio 9.1 для Windows - це 32-розрядна програма. Eclipse, а отже і JBossDevStudio, не працює з неправильним типом JVM. 64-розрядне затемнення потребує 64-розрядної JVM, 32-розрядне затемнення потребує 32-розрядної JVM. Таким чином, налаштування Eclipse для роботи з моїм встановленим 64-розрядним JDK не спрацювало.

Встановлення 32-розрядного JDK та запуск Eclipse вирішило проблему.

Принаймні, для одного з моїх проектів інший, де я намагався налаштувати середовище виконання JDK у властивостях проекту Eclipse, все ще не працює.


0

Я вирішив проблему, видаливши JRE зі своєї системи і залишивши лише JDK. Перевстановити JDK недостатньо, оскільки інсталятор Oracle JDK встановлює як JDK, так і JRE

До речі, мені здається, що ця помилка відповідає за проблеми: java.home Eclipse JRE використовується замість JRE збірки


0

У моєму випадку я виконував Maven Build з Eclipse Run Configurations. Навіть після зміни конфігурації JRE за замовчуванням, яка вказує на папку інсталяції JDK, ця проблема не була вирішена для мене. Причина полягає в тому, що в Maven Build - Run Configuration є вкладка JRE (див. Малюнок нижче). І це все ще вказувало на мою інсталяцію JRE. Я змінив його, щоб вказати на встановлення JDK, а потім запустив Maven Build. Цього разу це спрацювало. введіть тут опис зображення


0

Давайте розберемося, чому сталася ця проблема:

$ mvn -версія

Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20: 00: 29 + 01: 00) Maven home: C: \ Program Files \ Apache \ maven-3.6.1 Версія Java: 1.8.0_221, постачальник: Oracle Corporation, час виконання: C: \ Program Files \ Java \ jre1.8.0_221 Мова за замовчуванням: en_GB, кодування платформи: Cp1252 Назва ОС: "windows 10", версія: "10.0", арка: "amd64", сімейство: "windows"

Команда Maven "mvn -version" повертається над результатом.

Ми бачимо, що maven отримує шлях виконання Java як "C: \ Program Files \ Java \ jre1.8.0_221", якщо ви не вказали змінну середовища JAVA_HOME. І тоді maven приймає цей шлях як JAVA_HOME. Ось чому під час створення додатка з командного рядка або будь-якої IDE maven шукає файл tools.jar у шляху "% JAVA_HOME% .. \ lib \ tools.jar".

tools.jar присутній у шляху JDK, тому нам потрібно згадати про це maven перед його використанням. Зараз машини за добу будуються з уже доступним jre, але jdk потрібен лише для розробки. Це може бути причиною того, що maven автоматично вибирає шлях jre.

Для отримання додаткової допомоги, будь ласка, прочитайте код mvn.cmd, доступний у шляху встановлення maven.


0

Проблема в тому, що система не може знайти файл tools.jar

Отже, спочатку перевірте, чи файл знаходиться там в інсталяції каталогу JDK .

введіть тут опис зображення

Зробіть поданий нижче запис у 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_241\lib\tools.jar</systemPath>
</dependency> 

потім також виконайте наведені нижче дії, щоб усунути проблему

1) Клацніть правою кнопкою миші на своєму проекті

2) Клацніть на Шлях побудови

Відповідно до зображення нижче, виберіть робочий простір за замовчуванням і натисніть на Готово.

введіть тут опис зображення


0

Зміна «Встановлені JRE» у розділі «Налаштування -> Java -> Встановлений JRE» на домашню сторінку JDK спрацювало для мене.

FYI - використовую JDK 1.8.


-1

Зміна відносного розташування ${java.home}/../lib/tools.jarдо абсолютного шляху C:\Program Files\Java\jdk1.6.0_29\lib\tools.jarроботи для мене.

Вам слід лише змінити його в playn/pom.xml.

Що стосується зразків playn, Владиатор має рацію, це занадто багато файлів pom для зміни.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.