Falta el artefacto com.sun: tools: jar

91

He estado siguiendo el tutorial de introducción, pero me quedo atascado después de importar el proyecto de playn usando Maven. Estoy usando Eclipse Indigo ejecutándose en Windows 7 de 64 bits.

Todos los proyectos importados tienen el mismo error:

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

Después de un par de horas de búsqueda en foros probé:

Instalación de la última versión de Java 1.6.029 Cambiando mi JAVA_HOMEvariable de entorno para que apunte a \program files\Java\jdk1.6_029 Cambiando mis preferencias de Eclipse Java para usar el JRE jdk1.6_029.

Realmente me gustaría experimentar con playn, pero por qué hay algunas publicaciones, parece que no puedo encontrar una respuesta consensuada sobre la solución. Algunas personas dicen que Sun eliminó algo del jdk de 64 bits, otras dicen que debe editar sus archivos xml, muchas personas han dicho que ha cambiado su JAVA_HOMEy otra dijo que debe cambiar las opciones de su máquina virtual para Eclipse.

Cualquier ayuda para aclarar esto sería apreciada y posiblemente útil para muchos, ya que no tengo una configuración particularmente extraña aquí.

(editar) Aquí está el pom.xml en el primer proyecto. Eclipse marca el error en la línea que dice:

<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>
invenciones atrevidas
fuente
¿Obtiene el mismo error al ejecutar maven desde la línea de comandos?
Raghuram
Agregué el archivo pom.xml. Me disculpo por no saber cómo hacer nada con maven usando la línea de comando.
boldinventions
POM está roto. Faltan etiquetas obligatorias como groupId, artifactId, version ... El POM principal también es una versión del módulo que no existe en Maven central ....
Mark O'Connor
lo arreglaste de alguna manera? nada de esto parece funcionar para mí (Windows7-64 bit - jdk1.6)
Ovidiu Latcu
Como se trata de un problema común, ¿podría aceptar una respuesta que le funcione?
Roy Truelove

Respuestas:

56

Acabo de publicar esta pregunta sobre este mismo problema y cómo lo resolví, pero también lo pegaré (y ampliaré) aquí, ya que parece más relevante.

Tuve el mismo problema al usar Eclipse en Windows 7, incluso cuando eliminé el JRE de la lista de JRE en la configuración de Eclipse y solo tenía el JDK allí.

Lo que terminé teniendo que hacer (como mencionó en su pregunta) fue modificar la línea de comandos para el acceso directo que uso para iniciar Eclipse para agregarle el argumento -vm así:

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

Por supuesto, lo ajustaría para que apunte al directorio bin de su instalación de JDK. Lo que esto hace es hacer que Eclipse se ejecute usando el JDK en lugar de JRE, y luego puede encontrar el tools.jararchivo correctamente.

Creo que esto tiene que ver con cómo Eclipse encuentra su JRE predeterminado cuando no se especifica ninguno. Supongo que tiende a preferir JRE sobre JDK (por qué, no lo sé) y busca el primer JRE compatible que encuentra. Y si se sale de las claves de registro de Windows como sugiere la respuesta de Vladiat0r, busca la HKLM\Software\JavaSoft\Java Runtime Environmentclave primero en lugar de la HKLM\Software\JavaSoft\Java Development Kitclave.

Kanmuri
fuente
10
Esto funcionó para nosotros en Windows 7. Tuvimos que modificar el acceso directo para agregar el argumento -vm "..." en lugar de usar eclipse.ini. Además, tuvimos que volver a importar nuestro proyecto maven al espacio de trabajo antes de que desapareciera el error.
Kit Menke
2
Lo mismo aquí, sin dados con .ini, pero el -vm arg en la línea cmd funcionó.
Roy Truelove
1
Edité la respuesta para explicar cómo cambiar eclipse.init. Fuente: wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example
OGrandeDiEnne
1
Lo mismo aquí: agregar -vm al acceso directo me ha funcionado. No he tenido que volver a importar mi proyecto, ha sido suficiente proyectarlo / maven / actualizarlo.
Łukasz Dumiszewski
1
Para que funcione, necesitaba agregar javaw.exea esa ruta también (así que en su totalidad :) -vm "T:\Program Files\Java\jdk1.8.0_66\bin\javaw.exe";
Jacob van Lingen
27

Tuve el mismo problema mientras desarrollaba una aplicación de servicio web simple, en mi caso tuve que agregar un complemento codehous para obtener las bibliotecas de jaxws. Sin embargo, maven pom siguió preguntando sobre el archivo jar de herramientas.

Tengo que decir que los comentarios anteriores son correctos, puede incluir la siguiente entrada en el archivo 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>

Pero, ¿qué pasará cuando tenga que implementar en una instancia de producción? Podría reemplazar la ruta con una referencia a una variable de entorno del sistema, pero eso aún no se ve bien, al menos para mí.

Encontré otra solución en un comentario de StackOverflow:

Problema de artefacto de 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>

Sugieren incluir una declaración de exclusión para el tarro de herramientas y funciona. Resumiendo: puede incluir una regla de exclusión dentro de su dependencia y evitar tener el problema tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
Cristian Colorado
fuente
3
Sugerencia: use 'mvn dependency: tree' para encontrar dónde insertar su exclusión.
Lars
Agregar la etiqueta de exclusiones pom.xmlno me funciona.
user3437460
25

Me encontré con el mismo problema y la forma en que pude resolverlo fue agregar la ubicación de dependencia de tools.jaren pom.xml. Al igual que:

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

Asegúrese de cambiar el lugar <systemPath>donde se encuentre su archivo tools.jar.

Denny
fuente
42
Recomiendo encarecidamente no hacer esto: resuelve el problema pero no es portátil para otros desarrolladores o para crear entornos. Vea las otras respuestas, parecen hacer el truco
Roy Truelove
tal vez sea mejor cambiar systemPath a <systemPath> $ {java.home} /lib/plugin.jar </systemPath>
Guilherme Santos
stackoverflow.com/questions/3080437/… tiene cómo hacer esto de forma portátil.
vorburger
Loco cambio mi pom.xml así (forzar una versión más nueva de java-md-doclet) el error desaparece: <dependencyManagement> <dependencies> <dependency> <groupId> com.github.iotaledger </groupId> <artifactId> java- md-doclet </artifactId> <version> 2.1.3 </version> </dependency> </dependencies> </dependencyManagement>
Samir 007
20

Ninguna de las otras respuestas lo hizo por mí. Lo que hizo fue verificar la "jerarquía de dependencia" del pom.xml en eclipse, donde al dar un filtro de 'herramientas' se reveló que tenía una dependencia real a tools.jar:

Vista de Eclipse

Entonces, el culpable para mí fue este:

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

Agregar una exclusión lo solucionó:

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

La exclusión no parece tener inconvenientes.

eis
fuente
1
Funcionó para mí, surgió un problema al actualizar un código base de java 6 a java 8
jasonoriordan
He identificado el plugin spotbugs-maven-plugin como mi culpable, ¡gracias!
timbru31
8

Lo mismo conmigo y Windows 7. Terminé agregando dos líneas a eclipse.ini:

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

Intenté usar %JAVA_HOME%allí, pero no funcionó.

Jakub Adamek
fuente
2
Nota para el futuro: esto tiene que estar antes de la -vmargslínea, ya que cualquier cosa pasada que se interpretará como argumentos de inicio de VM. Entonces: ¡justo antes de ese!
Eis el
Esta solución que se utiliza -vmantes de la -vmargses la clave. ¡Gracias!
Taber
6

Resolví este problema en la configuración de Eclipse 4.3, solo agregando bibliotecas JDK a las bibliotecas de JRE.

Vaya a Windows -> configuración -> Java -> JRE instalados -> seleccione JDK y haga clic en Editar -> haga clic en Agregar archivos JAR externos y agregue tools.jar (ubicado en JDK / lib)

Sealsix
fuente
5

Verifique la versión de JDK en su máquina y en pom.xmlambas debe ser la misma

<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>
arunkumar sambu
fuente
4

Si este problema persiste, puede deberse a un JDK de versión igual o superior a 11.

El tools.jararchivo se ha eliminado de la carpeta lib en esos JDK (consulte esta respuesta a una pregunta similar). En ese caso, intente utilizar otras versiones de las bibliotecas que no dependan de la com.sun:toolsbiblioteca.

Olivier
fuente
3

Después de luchar por un tiempo, finalmente logré que esto funcionara en eclipse.inilugar de la línea de comandos. Después de leer finalmente la documentación, me di cuenta de que el argumento -vm debe estar en una línea separada, sin comillas y antes de cualquier -vmargs:

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

Recibí un error similar. Esto se debe a que JDK no está configurado correctamente en eclipse. Cucumber necesita JDK junto con JRE, así que agregue la siguiente dependencia en su 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>
usuario1140969
fuente
1

En la pestaña POM efectiva de los archivos pom, veo la siguiente ruta de derivación: C:\Program Files\Java\jre6/../lib/tools.jar y creo que no es una ruta válida en Windows. Intenté copiar tools.jar en la carpeta jre6 / lib y en Java / lib sin éxito.

El valor "C: \ Archivos de programa \ Java \ jre6" proviene del registro

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

Y configure la clave JavaHome donde está instalado su jdk JRE. Luego, todos los errores del compilador desaparecieron.

Reinstalar el JDK no lo solucionó. Establecer la variable de entorno del sistema JAVA_HOME o java.home no ayudó.

La otra alternativa que he visto es agregar la dependencia con la ruta correcta en cada archivo pom xml, pero playn-samples tiene muchos archivos que es ridículo tener que editar.

¡Estos son los resultados efectivos de POM, que muestran el camino INCORRECTO!

 <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>
Vladiat0r
fuente
1

Agregue esta dependencia en el archivo pom.xml. Espero que esto ayude.
En la <systemPath>propiedad, debe escribir su ruta de acceso 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> 
Divyang Patel
fuente
1

Terminó usando la corrección de eclipse.ini:

openFile
-vm (Your Java Home JDK here)

Por ejemplo -vm C:\Java\JDK\1.6,.

También tuve que cambiar JRE a JDK:

En Eclipse IDE, vaya a:

  1. Ventana -> Preferencias -> JRE instalados
  2. Haga clic en Agregar (para ubicar el nuevo JRE)
  3. Seleccione JVM estándar -> siguiente
  4. Haga clic en Directorio para ubicar la casa de JRE, coloque JDK_INSTALL_LOCATION y finalice.
  5. Vaya a las Propiedades de su proyecto java -> Ruta de compilación Java -> Bibliotecas -> seleccione JRE -> Editar -> seleccione Espacio de trabajo predeterminado JRE -> finalizar
  6. Haga una limpieza completa del espacio de trabajo con proyecto -> limpiar.
ahaamán
fuente
Todas nuestras instancias de Windows de Eclipse IDE tienen este problema. Todos los IDE de Eclipse basados ​​en Ubuntu no se ven afectados por nosotros. Entonces, usamos este método en las instancias de Windows y soluciona nuestros problemas. Asegúrese de agregar un salto de línea después -vm, coloque la ruta del SDK de Java en la línea nect y coloque todo el -vmindicador recién agregado antes --vmargsdel eclipse.iniarchivo.
tom_mai78101
1

Como han dicho otros carteles, el problema aquí tiene que ver con el JRE que está usando eclipse al no poder encontrar el tarro de herramientas. Resolví el problema yendo en una dirección un poco diferente a la que se dijo anteriormente, y fue por la forma en que mis proyectos y mi entorno.

Eclipse 4.5 requiere al menos Java 7 para el tiempo de ejecución, por lo que tengo la configuración de mi sistema para usar un Java 8 JRE ubicado en C: \ java \ jre1.8.0_45.

A continuación, estoy usando un archivo POM que asume que estoy ejecutando un 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>

No se me permite cambiar el archivo POM, así que tuve que hacer algo de póquer. Copié tools.jar de mi Java 6 JDK, creé el directorio C: \ java \ lib y lo pegué allí. Luego reinicié eclipse y limpié mi proyecto. Y los errores de VOILA se han ido.

No es una solución elegante, y creo que la solución adecuada sería cambiar la forma en que se configura el POM, pero como no pude, esto funciona.

Rick Velilla II
fuente
0

Tuve el mismo problema en Windows 7 y Eclipse 3.7 Logré solucionarlo comenzando

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

Puede iniciar un cmd y lanzar eclipse así, o puede editar su acceso directo y agregar -vm "D: \ JDK6 \ bin" como argumento en la "sección de destino".

Como nota al margen, también intenté agregar -vm "D: \ JDK6 \ bin" a eclipse.ini pero no funcionó. Y agregar JRE6 no funcionará ya que NO contiene tools.jar en su directorio "lib". Solo JDK lo hace.

salto-gato
fuente
0

Después de probar todo lo anterior, todavía tenía el mismo problema.

  • La variable de entorno PATH apunta a JDK 1.7 \ bin
  • Mi variable de entorno JAVA_HOME se apuntó al JDK 1.7
  • Mi eclipse.ini tenía la entrada javaw -vm apuntando a JDK 1.7
  • Mi preferencia de eclipse tenía JDK 1.7 como JRE instalado.
  • La ruta de construcción de mi proyecto estaba usando JDK 1.7.

Luego intenté lo siguiente,

  • Abra un símbolo del sistema y escriba java -version. Me mostró una versión 1.8 de JRE.

  • Abra un símbolo del sistema y fue a la ubicación del directorio bin de JDK 1.7 y escribió java -version. Esta vez mostró correctamente 1.7.

Luego, después de excavar en algunos lugares, descubrí que, además de las ubicaciones anteriores, hay ubicaciones adicionales para el tiempo de ejecución de Java.

Registro

También hay una clave de registro donde se especifica la ubicación de JRE en

HKLM \ Software \ Javasoft \ Versión

Cambié las entradas aquí para que apunten al JDK 1.7

ProgramData

El directorio "C: \ ProgramData \ Oracle \ Java \ javapath" está presente en la variable de entorno PATH y contiene accesos directos a java, javaw, etc. El destino de estos accesos directos eran todos JRE 1.8. ( Este creo que fue el principal problema ) Cambié los atajos para apuntar a los exe JDK correctos.

Una vez hecho todo esto. Abrí eclipse, todos los errores jdk.tools pom.xml desaparecieron.

Ceniza R
fuente
0

Tengo este problema y resulta que JBossDevStudio 9.1 en Windows es un programa de 32 bits. Eclipse, y por lo tanto JBossDevStudio, no funciona con el tipo incorrecto de JVM. El eclipse de 64 bits necesita una JVM de 64 bits, el eclipse de 32 bits necesita una JVM de 32 bits. Por lo tanto, configurar Eclipse para que se ejecute con mi JDK de 64 bits instalado no funcionó.

La instalación de un JDK de 32 bits y la ejecución de Eclipse resolvió el problema.

Al menos para uno de mis proyectos, otro en el que intenté configurar un JDK en tiempo de ejecución en las propiedades del proyecto Eclipse todavía está roto.

Samuel Åslund
fuente
0

En mi caso, estaba ejecutando Maven Build desde Eclipse Run Configurations. Incluso después de cambiar la configuración predeterminada de JRE para que apunte a la carpeta de instalación de JDK, el problema no se solucionó. La razón es que hay una pestaña JRE en Maven Build - Run Configuration (ver la imagen a continuación). Y todavía apuntaba a mi instalación de JRE. Lo cambié para que apunte a la instalación de JDK y luego ejecuté Maven Build. Esta vez funcionó. ingrese la descripción de la imagen aquí

user8058203
fuente
0

Entendamos por qué sucedió este problema:

$ mvn -version

Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20: 00: 29 + 01: 00) Inicio de Maven: C: \ Archivos de programa \ Apache \ maven-3.6.1 Versión de Java: 1.8.0_221, proveedor: Oracle Corporation, tiempo de ejecución: C: \ Archivos de programa \ Java \ jre1.8.0_221 Configuración regional predeterminada: en_GB, codificación de plataforma: Cp1252 Nombre del sistema operativo: "windows 10", versión: "10.0", arch: "amd64", familia: "windows"

El comando Maven "mvn -version" devuelve el resultado anterior.

Podemos ver que maven obtiene la ruta de tiempo de ejecución de Java como "C: \ Archivos de programa \ Java \ jre1.8.0_221" si no especifica la variable de entorno JAVA_HOME. Y luego maven asume que esta ruta es JAVA_HOME. Es por eso que al construir la aplicación desde el símbolo del sistema o desde cualquier IDE, maven busca el archivo tools.jar en la ruta "% JAVA_HOME% .. \ lib \ tools.jar".

tools.jar está presente en la ruta JDK, por lo que debemos mencionar esto a maven antes de usarlo. Hoy en día, las máquinas se construyen con jre ya disponible, pero jdk solo se requiere para el desarrollo. Esta podría ser la razón por la que maven elige la ruta jre automáticamente.

Para obtener más ayuda, lea el código mvn.cmd disponible en la ruta de instalación de maven.

Sambit Swain
fuente
0

El problema es que el sistema no puede encontrar el archivo tools.jar

Entonces, primero verifique que el archivo esté allí en la instalación JDK del directorio.

ingrese la descripción de la imagen aquí

Haga la siguiente entrada en POM.xml como lo señalaron correctamente otros

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

luego siga los pasos a continuación también para eliminar el problema

1) Haga clic derecho en su proyecto

2) Haga clic en Crear ruta

Según la imagen de abajo, seleccione el espacio de trabajo predeterminado JRE y haga clic en finalizar.

ingrese la descripción de la imagen aquí

Gaurav Khurana
fuente
0

Cambiar 'JRE instalados' en 'Preferencias -> Java -> JRE instalado' a JDK home funcionó para mí.

FYI: estoy usando JDK 1.8.

Larsen
fuente
-1

Si está utilizando openjdk, debe instalar el paquete openjdk-6-sdk.

cebolleta
fuente
-1

Cambiar la ubicación relativa de ${java.home}/../lib/tools.jarla ruta absoluta de las C:\Program Files\Java\jdk1.6.0_29\lib\tools.jarobras para mí.

Solo debería tener que cambiarlo en el playn/pom.xml.

Ahora, para las muestras de playn, Vladiator tiene razón, son demasiados archivos pom para cambiar.

JDBertron
fuente