Artefato ausente com.sun: tools: jar

95

Tenho seguido o tutorial de introdução, mas estou preso depois de importar o projeto playn usando o Maven. Estou usando o Eclipse Indigo em execução no Windows 7 de 64 bits.

Todos os projetos importados apresentam o mesmo erro:

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

Depois de algumas horas pesquisando nos fóruns, tentei:

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

Eu realmente gostaria de experimentar o playn, mas por que existem alguns posts, não consigo encontrar uma resposta consensual sobre a 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 o seu JAVA_HOMEe outras disseram que você deve alterar suas opções de VM para o Eclipse.

Qualquer ajuda em esclarecer isso seria apreciada e possivelmente útil para muitos, uma vez que não tenho uma configuração particularmente estranha aqui.

(editar) Aqui está o pom.xml do primeiro projeto. O Eclipse sinaliza um 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>
ousadas invenções
fonte
Você obtém o mesmo erro ao executar o maven na linha de comando?
Raghuram
Eu adicionei o arquivo pom.xml. Peço desculpas por não saber como fazer nada com o maven usando a linha de comando.
boldinventions
POM está quebrado. Tags obrigatórias ausentes, como groupId, artifactId, versão ... O POM pai também é uma versão do módulo que não existe no Maven central ....
Mark O'Connor
você consertou de alguma forma? nada disso parece funcionar para mim (Windows7-64 bit - jdk1.6)
Ovidiu Latcu
Como esse é um problema comum, você poderia aceitar uma resposta que funcionou para você?
Roy Truelove

Respostas:

56

Acabei de postar esta questão sobre esse mesmo problema e como resolvi, mas vou colar (e expandir) aqui também, pois 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 apenas tinha o JDK lá.

O que acabei tendo que fazer (como você mencionou em sua pergunta) foi modificar a linha de comando do atalho que uso para iniciar o Eclipse para adicionar o argumento -vm a ele assim:

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

Claro, você iria ajustar que para apontar para o diretório bin de seu JDK instalar. O que isso faz é fazer com que o próprio Eclipse seja executado usando o JDK em vez do JRE, e então ele é capaz de localizar o tools.jarcorretamente.

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

Kanmuri
fonte
10
Isso funcionou para nós no Windows 7. Tivemos que modificar o atalho para adicionar o argumento -vm "..." em vez de usar eclipse.ini. Além disso, tivemos que reimportar nosso projeto maven para a área de trabalho antes que o erro desaparecesse.
Kit Menke
2
O mesmo aqui - sem dados com .ini, mas o arg -vm no cmdline funcionou.
Roy Truelove
1
Editei a resposta para explicar como alterar eclipse.init. Fonte: wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example
OGrandeDiEnne
1
O mesmo aqui - adicionar -vm ao atalho funcionou para mim. Não precisei reimportar meu projeto, basta projetá-lo / maven / atualizá-lo.
Łukasz Dumiszewski
1
Para deixá-lo funcionar, eu precisava adicionar javaw.exea esse caminho também (portanto, na íntegra -vm "T:\Program Files\Java\jdk1.8.0_66\bin\javaw.exe":);
Jacob van Lingen
27

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

Devo 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ê precisar 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.

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 jarro de ferramentas e funciona. Resumindo: você pode incluir uma regra de exclusão em sua dependência e evitar o problema de tool.jar:

 <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
Cristian Colorado
fonte
3
Dica: use 'mvn dependency: tree' para descobrir onde inserir sua exclusão.
Lars
Adicionar a tag de exclusão pom.xmlnão funciona para mim.
user3437460
26

Encontrei o mesmo problema e a maneira como consegui resolvê-lo foi adicionando o local de dependência de tools.jarao 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 o arquivo tools.jar está localizado.

Denny
fonte
44
Eu sugiro fortemente não fazer isso - ele resolve o problema, mas não é portátil para outros desenvolvedores ou para construir ambientes. Veja as outras respostas, elas parecem funcionar
Roy Truelove
talvez seja melhor mudar o systemPath para <systemPath> $ {java.home} /lib/plugin.jar </systemPath>
Guilherme Santos
stackoverflow.com/questions/3080437/… tem como fazer isso de forma portátil.
vorburger de
Eu mudei meu pom.xml assim (forçar a versão mais recente de java-md-doclet) o erro desaparece: <dependencyManagement> <dependencies> <dependency> <groupId> com.github.iotaledger </groupId> <artifactId> java- md-doclet </artifactId> <version> 2.1.3 </version> </dependency> </dependencies> </dependencyManagement>
Samir 007
22

Nenhuma das outras respostas fez isso por mim. O que fiz foi verificar a existência de "Hierarquia de dependência" do pom.xml no eclipse, onde fornecer um filtro 'ferramentas' revelou que eu tinha uma dependência real para tools.jar:

Eclipse View

Então, o culpado para mim foi este:

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

Adicionar uma exclusão corrigiu:

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

eis
fonte
1
Funcionou para mim, surgiu um problema ao atualizar uma base de código java 6 para java 8
jasonoriordan
Identifiquei o plug-in spotbugs-maven como meu culpado, obrigado!
timbru31
8

O mesmo comigo e com o Windows 7. Acabei adicionando duas linhas para eclipse.ini:

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

Tentei usar %JAVA_HOME%lá, mas não deu certo.

Jakub Adamek
fonte
2
Nota para mim no futuro: isso tem que ser antes da -vmargslinha, como qualquer coisa passada que será interpretada como argumentos de inicialização da VM. Então: um pouco antes disso!
eis
Esta solução usando -vmantes do -vmargsé a chave !. Obrigado!
Taber
6

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

Vá para windows -> configurações -> Java -> JREs instalados -> selecione JDK e clique em Editar -> clique em Adicionar JARs externos e adicione tools.jar (colocado em JDK / lib)

Sealsix
fonte
5

Verifique a versão do JDK em sua máquina e em pom.xmlambas deve ser a mesma

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

Se o problema persistir, pode ser devido a um JDK de versão igual ou superior a 11.

O tools.jararquivo foi removido da pasta lib nesses JDKs (veja esta resposta para uma pergunta semelhante). Nesse caso, tente usar outras versões das bibliotecas, que não dependem da com.sun:toolsbiblioteca.

Olivier
fonte
3

Depois de lutar por um tempo, finalmente consegui trabalhar com isso em eclipse.inivez da linha de comando. Depois de finalmente ler a documentação , percebi que o argumento -vm deve estar em uma linha separada, não citada, e à frente de qualquer -vmargs:

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

Recebi 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 a 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>
user1140969
fonte
1

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

O valor "C: \ Program Files \ 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 seu jdk JRE está instalado. Então, todos os erros do compilador foram embora.

Reinstalar o JDK não resolveu. Definir a variável de ambiente do sistema JAVA_HOME ou java.home não ajudou.

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

Este é o resultado efetivo do POM, que mostra 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>
Vladiat0r
fonte
1

Adicione esta dependência no arquivo pom.xml. Espero esta ajuda.
Na <systemPath>propriedade, você deve escrever seu caminho de lib jdk.

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

Acabou usando a correção eclipse.ini:

openFile
-vm (Your Java Home JDK here)

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

Também foi necessário alterar o JRE para JDK:

No Eclipse IDE, vá para:

  1. Janela -> Preferências -> JREs instalados
  2. Clique em Adicionar (para localizar o novo JRE)
  3. Selecione JVM padrão -> próximo
  4. Clique em Directory para localizar o JRE home, coloque JDK_INSTALL_LOCATION e finalize.
  5. Vá para Propriedades do seu projeto Java -> Caminho de construção Java -> Bibliotecas -> selecione JRE -> Editar -> selecione Espaço de Trabalho JRE padrão -> Concluir
  6. Faça uma limpeza completa do espaço de trabalho com projeto -> limpar.
ahaaman
fonte
Todas as nossas instâncias do Eclipse IDE do Windows têm esse problema. Todos os IDEs Eclipse baseados no Ubuntu não são afetados por nós. Então, usamos esse método nas instâncias do Windows e ele corrige nossos problemas. Certifique-se de adicionar uma quebra de linha depois -vm, coloque o caminho do Java SDK na linha nect e coloque todos os -vmsinalizadores recém-adicionados antes de --vmargsno eclipse.iniarquivo.
tom_mai78101
1

Como outros participantes afirmaram, o problema aqui tem a ver com o JRE que o eclipse está usando, não sendo capaz de localizar o jarro de ferramentas. Resolvi o problema indo em uma direção um pouco diferente do que foi dito acima, e foi por causa da forma como meus projetos e ambiente.

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

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

Não tenho permissão para alterar o arquivo POM, então tive que fazer alguns truques. Copiei o tools.jar do meu Java 6 JDK, criei o diretório C: \ java \ lib e colei lá. Eu então reiniciei o eclipse e limpei meu projeto. E os erros do VOILA desapareceram.

Não é uma solução elegante, e eu pensaria que a solução adequada seria alterar a configuração do POM, mas como não consegui, funciona.

Rick Velilla II
fonte
1

Se você estiver vendo isso em um sistema operacional recém-instalado / atualizado, é porque JAVA_HOME não está configurado corretamente.

precisamos definir JAVA_HOME corretamente. Por exemplo no mac: se eu quiser usar a versão java 1.8.0_261

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_261`
Rohit Kumar
fonte
0

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

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

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

Como nota lateral, também tentei adicionar -vm "D: \ JDK6 \ bin" ao eclipse.ini, mas não funcionou. E adicionar JRE6 não funcionará, uma vez que NÃO contém tools.jar em seu diretório "lib". Apenas o JDK o faz.

Jumping Jack
fonte
0

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

  • A 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 JDK 1.7
  • Minha preferência de eclipse tinha JDK 1.7 como o JRE instalado.
  • Meu caminho de construção do projeto estava usando JDK 1.7.

Então tentei o seguinte,

  • Abra um prompt de comando e digite java -version. Ele me mostrou um JRE versão 1.8.

  • Abra um prompt de comando e acesse o local do diretório bin do JDK 1.7 e digite java -version. Desta vez, ele mostrou corretamente 1.7.

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

Registro

Também há uma chave de registro onde a localização do JRE é especificada em

HKLM \ Software \ Javasoft \ Version

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 java, javaw etc ... O destino para esses atalhos eram todos JRE 1.8. ( Acho que esse foi o problema principal ). Alterei os atalhos para apontar para os exe JDK corretos.

Depois que tudo isso foi feito. Abri o eclipse e todos os erros jdk.tools pom.xml desapareceram.

Ash R
fonte
0

Eu tenho esse problema e descobri 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. Portanto, configurar o Eclipse para ser executado com 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 tentei configurar um JDK de tempo de execução nas propriedades do projeto Eclipse ainda está quebrado.

Samuel Åslund
fonte
0

No meu caso, 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. O motivo é que há uma guia JRE no Maven Build - Run Configuration (veja a imagem abaixo). E ainda estava apontando para a minha instalação do JRE. Mudei para apontar para a instalação do JDK e, em seguida, executei o Maven Build. Desta vez, funcionou. insira a descrição da imagem aqui

user8058203
fonte
0

Vamos entender por que esse problema aconteceu:

$ mvn -version

Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T20: 00: 29 + 01: 00) Página inicial do Maven: C: \ Arquivos de programas \ Apache \ maven-3.6.1 Versão do Java: 1.8.0_221, fornecedor: Oracle Corporation, tempo de execução: C: \ Arquivos de programas \ Java \ jre1.8.0_221 Localidade padrão: en_GB, codificação de plataforma: Cp1252 Nome do sistema operacional: "windows 10", versão: "10.0", arch: "amd64", família: "windows"

O comando Maven "mvn -version" retorna acima da saída.

Podemos ver que o maven obtém o caminho do tempo de execução java como "C: \ Arquivos de programas \ Java \ jre1.8.0_221" se você não especificar a variável de ambiente JAVA_HOME. E então o maven assume que esse caminho é JAVA_HOME. É por isso que ao construir o aplicativo a partir do prompt de comando ou de qualquer IDE, o maven procura o arquivo tools.jar no caminho "% JAVA_HOME% .. \ lib \ tools.jar".

tools.jar está presente no caminho JDK, portanto, precisamos mencionar isso ao maven antes de usá-lo. Hoje em dia as máquinas são construídas com o jre já disponível, mas o jdk só é necessário para o desenvolvimento. Essa pode ser a razão pela qual o maven escolhe o caminho jre automaticamente.

Para obter mais ajuda, leia o código mvn.cmd disponível no caminho de instalação do maven.

Sambit Swain
fonte
0

O problema é que o sistema não consegue encontrar o arquivo tools.jar

Portanto, primeiro verifique se o arquivo está lá na instalação do JDK do diretório.

insira a descrição da imagem aqui

Faça a entrada abaixo em POM.xml conforme apontado corretamente por outros

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

em seguida, siga as etapas abaixo também para remover o problema

1) Clique com o botão direito no seu projeto

2) Clique em Build path

Conforme a imagem abaixo, selecione o JRE padrão da área de trabalho e clique em Concluir.

insira a descrição da imagem aqui

Gaurav khurana
fonte
0

Alterar 'JREs instalados' em 'Preferências -> Java -> JRE instalado' para JDK inicial funcionou para mim.

Para sua informação - estou usando o JDK 1.8.

Larsen
fonte
-1

Alterar a localização relativa de ${java.home}/../lib/tools.jarpara o caminho absoluto de C:\Program Files\Java\jdk1.6.0_29\lib\tools.jarobras para mim.

Você só deve alterá-lo no playn/pom.xml.

Agora, para os exemplos de reprodução, Vladiator está certo, são muitos arquivos pom para alterar.

JDBertron
fonte