ti-enxame.com

Artefato faltando com.Sun: ferramentas: jar

Eu tenho seguido o tutorial de introdução, mas estou preso depois que importei o projeto playn usando o Maven. Eu estou usando o Eclipse Indigo rodando em 64 bits do Windows 7.

Todos os projetos importados têm o mesmo erro:

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

Depois de algumas horas de busca em fóruns eu tentei:

Instalando o Java 1.6.029 mais recente Alterando minha variável de ambiente Java_HOME para apontar para \program files\Java\jdk1.6_029 Alterando minhas preferências Java do Eclipse para usar o JRE jdk1.6_029.

Eu realmente gostaria de experimentar o playn, mas por que existem algumas postagens que não consigo encontrar uma resposta de consenso na solução. Algumas pessoas dizem que a Sun removeu algo do jdk de 64 bits, outras dizem que você deve editar seus arquivos xml, muitas pessoas disseram que você alterou seu Java_HOME e outro disse que você precisa alterar suas opções VM para o Eclipse.

Qualquer ajuda para esclarecer isto seria apreciada, e possivelmente útil para muitos, já que eu não tenho uma configuração particularmente estranha aqui.

(edit) Aqui está o pom.xml no primeiro projeto. O Eclipse sinaliza erro na linha que diz:

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

Acabei de postar em esta questão sobre esse mesmo problema e como resolvi, mas vou colar (e expandir) aqui também, já que parece mais relevante.

Eu tive o mesmo problema ao usar o Eclipse no Windows 7, mesmo quando removi o JRE da lista de JREs nas configurações do Eclipse e só tinha o JDK lá.

O que eu acabei tendo que fazer (como você mencionou na sua pergunta) foi modificar a linha de comando para o atalho que eu uso para iniciar o Eclipse para adicionar o argumento -vm para ele da seguinte forma:

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

Naturalmente, você ajustaria isso para apontar para o diretório bin da instalação do JDK your. O que isto faz é fazer o próprio Eclipse rodar usando o JDK ao invés do JRE, e então ele pode encontrar o tools.jar corretamente.

Eu acredito que isso tem a ver com como o Eclipse encontra seu JRE padrão quando nenhum é especificado. Eu estou supondo que tende a preferir o JRE ao JDK (porque, eu não sei) e vai para o primeiro JRE compatível que encontrar. E se ele está saindo de chaves de registro do Windows como sugere a resposta do Vladiat0r, ele procura pela chave HKLM\Software\JavaSoft\Java Runtime Environment primeiro em vez da chave HKLM\Software\JavaSoft\Java Development Kit.

53
Kanmuri

Eu corri para o mesmo problema e do jeito que eu fui capaz de resolvê-lo foi adicionar o local de dependência de tools.jar no pom.xml. Igual a:

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

Certifique-se de alterar o <systemPath> para onde seu arquivo tools.jar estiver localizado.

23
Denny

Eu tive o mesmo problema ao desenvolver um aplicativo de serviço da web simples, no meu caso eu tive que adicionar um plug-in codehous para obter as bibliotecas do jaxws. No entanto, o maven pom continuou perguntando sobre o arquivo jar de ferramentas. 

Eu tenho que dizer que os comentários acima estão corretos, você pode incluir a entrada abaixo no arquivo 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>

Mas, o que acontecerá quando você tiver que implantar em uma instância de produção? Você poderia substituir o caminho por uma referência a uma variável de ambiente do sistema, mas isso ainda não parece bom, pelo menos para mim.

Eu encontrei outra solução em um comentário StackOverflow:

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

Eles sugerem incluir uma declaração de exclusão para o jar de ferramentas e funciona. Resumindo: você pode incluir uma regra de exclusão em sua dependência e evitar ter o problema tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.Sun</groupId>
            </exclusion>
        </exclusions>
21
Cristian Colorado

Nenhuma das outras respostas fez isso por mim. O que foi verificar a "hierarquia de dependência" do pom.xml no Eclipse, onde dar um filtro "tools" revelou que eu tinha uma dependência real do tools.jar:

Eclipse View

Então, o culpado por mim foi este:

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

Adicionando uma exclusão fixa:

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

A exclusão não parece ter desvantagens para ela.

13
eis

Eu resolvi esse problema nas configurações do Eclipse 4.3 - apenas adicionando bibliotecas JDK às bibliotecas do JRE.

Vá no windows -> settings -> Java -> JREs instalados -> selecione JDK e clique em Edit -> clique em Add External JARs e adicione tools.jar (colocado no JDK/lib)

6
Sealsix

O mesmo comigo e com o Windows 7. Acabei de adicionar duas linhas para Eclipse.ini:

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

Eu tentei usar %Java_HOME%, mas não funcionou.

5
Jakub Adamek

Depois de lutar por um tempo, finalmente consegui que isso funcionasse com Eclipse.ini em vez da linha de comando. Depois de finalmente ler a documentação percebi que o argumento -vm deve estar em uma linha separada, sem aspas e à frente de qualquer -vmargs:

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

Verifique a versão do JDK em sua máquina e em pom.xml ambos devem ser iguais

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

Como outros pôsteres declararam, a questão aqui tem a ver com o JRE que o Eclipse está usando, não sendo capaz de encontrar o jar de ferramentas. Eu resolvi o problema indo em uma direção diferente do que foi dito acima, e foi por causa da maneira que meus projetos e ambiente.

O Eclipse 4.5 requer pelo menos o Java 7 para o tempo de execução, portanto, tenho a configuração do meu sistema para usar um Java 8 JRE localizado em C:\Java\jre1.8.0_45.

Em seguida, estou usando um arquivo POM que pressupõe que estou executando com um 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>

Eu não tenho permissão para alterar o arquivo POM, então eu tive que fazer alguns pokery jiggery. Eu copiei o tools.jar do meu Java 6 JDK, criei o diretório C:\Java\lib e colei-o lá. Eu reiniciei o Eclipse e limpei meu projeto. E os erros do VOILA se foram.

Não é uma solução elegante, e eu acho que a solução adequada seria mudar a maneira como o POM é configurado, mas como não consegui, isso funciona. 

1
Rick Velilla II

Adicione esta dependência no arquivo pom.xml. Espero que esta ajuda.
Na propriedade <systemPath> você tem que escrever o seu caminho 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
Divyang Patel

Eu tenho um erro semelhante. Isso ocorre porque o JDK não está configurado corretamente no Eclipse. O Pepino precisa do JDK junto com o JRE, portanto, adicione dependência abaixo em seu 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
user1140969

Na aba POM efetiva dos arquivos pom, vejo o seguinte caminho derivado: C:\Program Files\Java\jre6/../lib/tools.jar e acho que não é um caminho válido no Windows. Eu tentei copiar o tools.jar na pasta jre6/lib, bem como em Java/lib sem sucesso.

O valor "C:\Arquivos de Programas\Java\jre6" vem do registro 

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

E defina a chave JavaHome para onde o seu jdk JRE está instalado. Então todos os erros do compilador foram embora.

Reinstalar o JDK não resolveu. Configurar a variável de ambiente do sistema Java_HOME ou Java.home não ajudou.

A outra alternativa que eu vi é adicionar a dependência com o caminho certo em cada arquivo pom xml, mas o playn-samples tem muitos arquivos que é uma dor ridícula ter que editar.

Estes são os resultados efetivos do POM, que mostram o caminho ERRADO!

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

Eu tive o mesmo problema em um Windows 7 e Eclipse 3.7 Eu consegui consertá-lo, iniciando 

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

Você pode iniciar um cmd e iniciar o Eclipse assim, ou editar seu atalho e adicionar -vm "D:\JDK6\bin" como um argumento na "seção de destino".

Como um sidenote, eu também tentei adicionar -vm "D:\JDK6\bin" ao Eclipse.ini, mas não funcionou. E adicionar o JRE6 não funcionará, uma vez que ele não contém tools.jar em seu " lib "diretório. Apenas o JDK faz.

0
Tiberiu Rogojan

Acabou usando a correção Eclipse.ini:

openFile
-vm (Your Java Home JDK here)

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

Tive também que mudar o JRE para o JDK:

No Eclipse IDE, vá para:

  1. Janela -> Preferências -> JREs Instalados 
  2. Clique em Add (para localizar o novo JRE)
  3. Selecione JVM padrão -> next 
  4. Clique no diretório para localizar o JRE em casa, colocar JDK_INSTALL_LOCATION e terminar.
  5. Vá para Propriedades do seu projeto Java -> Caminho de compilação Java -> Bibliotecas -> selecione JRE -> Editar -> selecione JRE padrão da área de trabalho -> terminar
  6. Faça uma limpeza completa do espaço de trabalho com project -> clean.
0
ahaaman

No meu caso, eu estava executando o Maven Build a partir do Eclipse Run Configurations. Mesmo depois de alterar a configuração padrão do JRE para apontar para a pasta de instalação do JDK, o problema não foi corrigido para mim. A razão é que existe uma aba JRE na Configuração do Maven Build - Run (veja a imagem abaixo). E ainda estava apontando para minha instalação do JRE. Eu mudei para apontar para a instalação do JDK e depois executei o Maven Build. Desta vez, funcionou. digite a descrição da imagem aqui

0
user8058203

Eu resolvi o problema desinstalando o JRE do meu sistema e deixando apenas o JDK. Reinstalar o JDK não é suficiente porque o instalador do Oracle JDK instala o JDK e o JRE

BTW, parece-me que este bug é responsável por problemas: Java.home do Eclipse JRE é usado em vez da construção JRE

0
michaldo

Depois de experimentar todos os itens acima, eu ainda estava tendo o mesmo problema.

  • Variável de ambiente PATH aponta para JDK 1.7\bin
  • Minha variável de ambiente Java_HOME foi apontada para o JDK 1.7
  • Meu Eclipse.ini tinha a entrada javaw -vm apontando para o JDK 1.7
  • Minha preferência do Eclipse tinha o JDK 1.7 como o JRE instalado.
  • Meu caminho de construção do projeto estava usando o JDK 1.7.

Então eu tentei o seguinte,

  • Abra um comando Prompt e digite Java -version. Mostrou-me uma versão 1.8 do JRE.

  • Abra um prompt de comando e vá para o local do diretório JDK 1.7 bin e digite Java -version. Desta vez, mostrou corretamente 1,7.

Então, depois de cavar em alguns lugares, descobri que, além dos locais acima, existem locais adicionais para o Java Runtime.

Registro

Há também uma chave do registro onde o local do JRE é especificado em

HKLM\Software\Javasoft\Version

Eu mudei as entradas aqui para apontar para o JDK 1.7

Dados do Programa

O diretório "C:\ProgramData\Oracle\Java\javapath" está presente na variável de ambiente PATH e contém atalhos para o Java, javaw etc ... O destino para esses atalhos era todo o JRE 1.8. ( Isso eu acho que foi o principal problema ) Eu mudei os atalhos para apontar para o exe JDK correto.

Depois disso tudo foi feito. Eu abri o Eclipse todos os erros pom.xml jdk.tools desapareceu.

0
Ash R

Eu tenho esse problema e acontece que o JBossDevStudio 9.1 no Windows é um programa de 32 bits. O Eclipse e, portanto, o JBossDevStudio, não funciona com o tipo errado de JVM. O Eclipse de 64 bits precisa de uma JVM de 64 bits, o Eclipse de 32 bits precisa de uma JVM de 32 bits. Assim, configurar o Eclipse para executar com o meu JDK de 64 bits instalado não funcionou.

Instalar um JDK de 32 bits e executar o Eclipse a partir disso resolveu o problema.

Pelo menos para um dos meus projetos, um outro em que eu tentei configurar um JDK de tempo de execução nas propriedades do projeto Eclipse ainda está quebrado.

0
Samuel Åslund