java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing


110

Durante a execução do junitteste, eclipserecebo o seguinte Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

eu já adicionei junit.jar arquivo de biblioteca.

Eu tentei diferentes versões do junit.jar: 4.4,4.8 , etc.

Como faço para corrigir essa exceção?


De acordo com a sua descrição, junit.jarnão está relacionado ao problema
Andremoniy

1
No harcrestjarro, a hierarquia é a mesma? como em org > hamcrest > SelfDescribing, ou está na pasta raiz do jar?
Danyel


1
este erro pode não ser para junit jar, talvez algo em seu projeto precise de outro jar, aqui estão alguns org.hamcrest.SelfDescribing - versões conhecidas
jdurango

1
Obrigado, mas não tenho mais nada no projeto, criei este novo projeto.
user2013948

Respostas:


92

Adicione hamcrest-all-X.X.jarao seu classpath .

A versão mais recente em fevereiro de 2015 é 1.3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=


2
Como posso adicioná-lo ao classpath ou verificar se ele foi adicionado ou não?
Tomáš Zato - Reintegração de Monica

Concordo, como fazer isso teria sido útil. Felizmente, o comentário abaixo tinha.
MarkII

@ TomášZato primeiro: verifique o arquivo. é hamcrest-all (é importante pegar tudo ). No Idea-IDEs, uma dependência é adicionada 1. copie / cole o arquivo na pasta libs (ou em qualquer outro lugar) 2. clique com o botão direito do mouse no arquivo "adicionar como biblioteca" 3. verifique suas declarações de importação em seus arquivos .java.
Martin Pfeffer,

hamcrest-all-X.X.jaré suficiente enquanto muito menor.
Elist

1
Arquivo --- Estrutura do projeto --- Bibliotecas --- '+' --- Java --- .... jar (você baixou) --- OK, ele aparecerá na 'biblioteca externa'.
Simon Z.

56

De acordo com o site da equipe JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jare hamcrest-core.jarsão necessários no classpath ao usar o JUnit 4.11.

Aqui está o bloco de dependência Maven para incluir junit e hamcrest.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>
<!-- Needed by junit -->
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

Estou enfrentando isso em 5 de junho, embora deva funcionar sem ele
Nikhil Sahu

22

Algumas etapas que você deve seguir:

  1. Clique com o botão direito no projeto.
  2. Escolha Build Path A seguir, em seu menu, escolha Add Libraries.
  3. Escolha JUnit e clique em Avançar.
  4. Escolha JUnit4 e depois Concluir.

1
Isso consertou para mim. Para quem não está acostumado a usar java / Eclipse, isso foi extremamente útil. Também gostaria de mencionar que os laboratórios fornecidos pelo meu instrutor para a aula tinham uma versão do Junit (3 talvez) que não estava funcionando com o meu laboratório / versão do Eclipse. Tive que removê-lo e adicionar 4 e tudo está bem agora. Muito obrigado.
Tony

Isso não funciona quando você está executando a compilação usando o prompt de comando. Esta é uma solução apenas "IDE".
Partha

16

Funciona para mim: IntelliJ IDEA 13.1.1, JUnit4, Java 6

Mudei o arquivo no caminho do projeto: [PROJECT_NAME] .iml

Substituído:

  <library>
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

De:

  <library name="JUnit4">
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

Portanto, o arquivo .iml final é:

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module-library">
      <library name="JUnit4">
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  </component>
</module>

PS: salve o arquivo e não deixe o IntelliJ Idea recarregá-lo. Só uma vez.


Super incrível !! Me ajuda com meu projeto atual.
MarkII

4

Você precisa do junit-dep.jar porque o junit.jar tem uma cópia das classes antigas do Hamcrest.


3

Esse problema é devido ao seu classpath miss hamcrest-core-1.3.jar. Para resolver isso, adicione hamcrest-core-1.3.jar ao adicionar junit-4.XX.jar ao seu classpath.

No início, também encontro esse problema, mas depois de consultar o site oficial e adicionar hamcrest-core-1.3.jar ao classpath com linha de comando, ele funciona corretamente finalmente.

javac -d ../../../../bin/ -cp ~/libs/junit-4.12.jar:/home/limxtop/projects/algorithms/bin  MaxHeapTest.java 

java -cp ../../../../bin/:/home/limxtop/libs/junit-4.12.jar:/home/limxtop/libs/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.limxtop.heap.MaxHeapTest

2

Como regra geral, sempre certifique-se de que o hamcrest esteja antes de qualquer outra biblioteca de teste no caminho de classe, pois muitas dessas bibliotecas incluem classes do hamcrest e podem, portanto, entrar em conflito com a versão do hamcrest que você está usando. Isso resolverá a maioria dos problemas do tipo que você está descrevendo.


2

Caso haja alguém aqui usando netbeans e tenha o mesmo problema, tudo o que você precisa fazer é

  • Clique com o botão direito em TestLibraries
  • Clique em Adicionar Biblioteca
  • Selecione JUnit e clique em adicionar biblioteca
  • Repita o processo, mas desta vez clique em Hamcrest e clique em adicionar biblioteca

Isso deve resolver o problema


Obrigado, isso funciona para mim. Eu já tinha a biblioteca JUnit, mas estava sentindo falta do Hamcrest.
S. Mayol


1

Parece um problema de caminho de classe, portanto, existem algumas maneiras diferentes de fazer isso. De onde vem org / hamcret / SelfDescribing? Essa é sua classe ou em um jarro diferente?

Tente acessar o Caminho de construção do projeto e, na guia Bibliotecas, adicione uma biblioteca. Você deve ser capaz de escolher JUnit para seu projeto. Isso é um pouco diferente do que apenas ter o arquivo jar JUnit em seu projeto.

Em sua configuração de execução para o teste JUnit, verifique o Classpath. Você provavelmente poderia corrigir isso adicionando a garantia de que seu Classpath pode ver essa classe SelfDescribing lá. A opção Executar no Eclipse possui um conjunto diferente de opções para as opções JUnit.


não é um problema de classpath, pois eu já adicionei o arquivo de biblioteca junit no caminho de construção, mesmo na biblioteca junit há uma referência a hamcrest, ou seja, C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948

obrigado pela sua resposta, testNG está funcionando bem, parece que vou ter que sair em junit
user2013948

Eu estava pensando que o JUnit realmente inicia uma nova JVM quando você executa algo como um teste de unidade. Isso significa que às vezes usa um caminho de classe diferente do seu projeto. Às vezes, para depurar esse tipo de coisa, imprimo o caminho de classe java a partir do meu código, para poder comparar as diferenças quando ele é executado. java-tips.org/java-se-tips/java.lang/…
Logan

1

Se esse problema surgir em um projeto RCP, pode ser porque o JUnit foi importado explicitamente.

Verifique o editor da sua aba plugin.xmlinferior Dependencies, remova dos org.junitPacotes Importados e adicione org.junitaos Plug-ins Requeridos.


1

O problema é quando você configura o eclipse para apontar para JRE em vez de JDK . JRE está junit4.jarna lib/extpasta, mas não hamcrest.jar:) Portanto, a solução é verificar os JREs instalados no Eclipse, remover o existente e criar um novo apontando para o seu JDK .


1

a maneira mais simples de resolver o problema para começar é copiar a versão mais recente de hamcrest-code.jar em seu CLASSPATH, que é o arquivo onde você armazena outros arquivos .jar necessários para compilação e execução de seu aplicativo.

que poderia ser, por exemplo: C: / ant / lib


1

Isso acontece quando você executa o Ant via linha de comando. As dependências implícitas do usuário são adicionadas ao classpath no final e têm precedência sobre o classpath adicionado ao projeto. Execute Ant com -nouserlibbandeira. As dependências implícitas seriam excluídas do caminho de classe.


1

Existe uma resposta melhor para resolver este problema. adicionar dependência

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

0

Tive o mesmo problema, a solução é adicionar no build path / plugin o jar org.hamcrest.core_1xx, você encontra em eclipse / plugins.


0

Algumas etapas que você deve seguir:

  • Clique com o botão direito no projeto.
  • Escolha Build Path e, em seguida, no menu, escolha Add Libraries.
  • Escolha JUnit e clique em Avançar.
  • Escolha JUnit4 e depois Concluir.

Isso funciona para mim ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.