it-swarm-pt.com

"Não foi possível encontrar ou fazer download de uma classe principal"?

Um problema comum que os novos desenvolvedores Java experimentam é que seus programas não são executados com a mensagem de erro: Could not find or load main class ...

O que isso significa, o que causa isso e como você deve consertar isso?

1137
Stephen C

A sintaxe do comando Java <class-name>

Primeiro de tudo, você precisa entender a maneira correta de iniciar um programa usando o comando Java (ou javaw).

A sintaxe normal1 é isto:

    Java [ <option> ... ] <class-name> [<argument> ...]

onde <option> é uma opção de linha de comando (começando com um caractere "-"), <class-name> é um nome de classe Java totalmente qualificado e <argument> é um argumento de linha de comando arbitrário que é passado para o seu aplicativo.
1 - Existe uma segunda sintaxe para arquivos JAR "executáveis", que descreverei na parte inferior.

O nome totalmente qualificado (FQN) para a classe é convencionalmente escrito como você faria no código-fonte Java; por exemplo.

    packagename.packagename2.packagename3.ClassName

No entanto, algumas versões do comando Java permitem que você use barras ao invés de pontos; por exemplo.

    packagename/packagename2/packagename3/ClassName

que (confusamente) se parece com um caminho de arquivo, mas não é um. Note que o termo nome totalmente qualificado é a terminologia padrão de Java ... não é algo que eu acabei de confundir :-)

Aqui está um exemplo de como um comando Java deve ser:

    Java -Xmx100m com.acme.example.ListUsers fred joe bert

O acima vai fazer com que o comando Java faça o seguinte:

  1. Procure a versão compilada da classe com.acme.example.ListUsers.
  2. Carregue a turma.
  3. Verifique se a classe tem um método main com signature, return type e modifiers dada por public static void main(String[]). (Note que o nome do argumento do método éNOTparte da assinatura).
  4. Chame esse método passando os argumentos de linha de comando ("fred", "joe", "bert") como um String[].

Razões pelas quais o Java não pode encontrar a classe

Quando você receber a mensagem "Não foi possível encontrar ou carregar a classe principal ...", isso significa que a primeira etapa falhou. O comando Java não conseguiu encontrar a classe. E, de fato, o "..." na mensagem será o nome de classe totalmente qualificado que Java está procurando.

Então, por que não conseguirá encontrar a turma?

Razão # 1 - você cometeu um erro com o argumento classname

A primeira causa provável é que você tenha fornecido o nome da classe errado. (Ou ... o nome da classe correta, mas na forma errada.) Considerando o exemplo acima, aqui uma variedade de caminhos errados para especificar o nome da classe:

  • Exemplo # 1 - um nome de classe simples:

    Java ListUser
    

    Quando a classe é declarada em um pacote como com.acme.example, você deve usar o nome completo da classe incluindo o nome do pacote no comando Java; por exemplo.

    Java com.acme.example.ListUser
    
  • Exemplo # 2 - um nome de arquivo ou nome de caminho, em vez de um nome de classe:

    Java ListUser.class
    Java com/acme/example/ListUser.class
    
  • Exemplo # 3 - um nome de classe com a caixa incorreta:

    Java com.acme.example.listuser
    
  • Exemplo # 4 - um erro de digitação

    Java com.acme.example.mistuser
    
  • Exemplo # 5 - um nome de arquivo de origem

    Java ListUser.Java
    
  • Exemplo # 6 - você esqueceu completamente o nome da classe

    Java lots of arguments
    

Razão # 2 - o caminho de classe do aplicativo é especificado incorretamente

A segunda causa provável é que o nome da classe está correto, mas o comando Java não pode encontrar a classe. Para entender isso, você precisa entender o conceito do "caminho de classe". Isso é explicado well pela documentação do Oracle:

Então ... se você especificou o nome da classe corretamente, a próxima coisa a verificar é se você especificou o classpath corretamente:

  1. Leia os três documentos relacionados acima. (Sim ... LEIA-os. É importante que um programador Java entenda pelo menos o básico de como os mecanismos de caminho de classe Java funcionam.)
  2. Observe a linha de comando e/ou a variável de ambiente CLASSPATH que está em vigor quando você executa o comando Java. Verifique se os nomes dos diretórios e os nomes dos arquivos JAR estão corretos.
  3. Se houver relative nomes de caminho no caminho de classe, verifique se eles resolvem corretamente ... a partir do diretório atual que está em vigor quando você executa o comando Java.
  4. Verifique se a classe (mencionada na mensagem de erro) pode estar localizada no caminho de classe eficaz.
  5. Observe que a sintaxe do caminho de classe é diferente para Windows versus Linux e Mac OS. (O separador de caminho de classe é ; no Windows e : nos outros. Se você usar o separador errado para a sua plataforma, você não receberá uma mensagem de erro explícita. Em vez disso, você obterá um arquivo ou diretório inexistente no caminho que será silenciosamente ignorado.)

Razão # 2a - o diretório errado está no caminho de classe

Quando você coloca um diretório no caminho de classe, ele corresponde nocionalmente à raiz do espaço de nome qualificado. As classes estão localizadas na estrutura de diretórios abaixo dessa raiz, mapeando o nome totalmente qualificado para um nome de caminho. Por exemplo, se "/ usr/local/acme/classes" estiver no caminho de classe, quando a JVM procurar uma classe chamada com.acme.example.Foon, ele procurará um arquivo ".class" com este nome de caminho:

  /usr/local/acme/classes/com/acme/example/Foon.class

Se você tivesse colocado "/ usr/local/acme/classes/com/acme/example" no caminho de classe, a JVM não conseguiria localizar a classe.

Razão # 2b - o caminho do subdiretório não corresponde ao FQN

Se suas classes FQN forem com.acme.example.Foon, a JVM irá procurar por "Foon.class" no diretório "com/acme/example":

  • Se sua estrutura de diretórios não corresponder à nomenclatura do pacote conforme o padrão acima, a JVM não encontrará sua classe.

  • Se você tentar renomear uma classe movendo-a, isso irá falhar também ... mas a exceção stacktrace será diferente.

Para dar um exemplo concreto, supondo que:

  • você quer executar a classe com.acme.example.Foon,
  • o caminho completo do arquivo é /usr/local/acme/classes/com/acme/example/Foon.class,
  • seu diretório de trabalho atual é /usr/local/acme/classes/com/acme/example/,

então:

# wrong, FQN is needed
Java Foon

# wrong, there is no `com/acme/example` folder in the current working directory
Java com.acme.example.Foon

# wrong, similar to above
Java -classpath . com.acme.example.Foon

# fine; relative classpath set
Java -classpath ../../.. com.acme.example.Foon

# fine; absolute classpath set
Java -classpath /usr/local/acme/classes com.acme.example.Foon

Notas:

  • A opção -classpath pode ser reduzida para -cp na maioria das versões do Java. Verifique as respectivas entradas manuais para Java, javac e assim por diante.
  • Pense cuidadosamente ao escolher entre nomes de caminho absolutos e relativos em caminhos de classe. Lembre-se de que um nome de caminho relativo pode "quebrar" se o diretório atual for alterado.

Razão # 2c - dependências ausentes do caminho de classe

O classpath precisa incluir todas as classes other (não-system) das quais seu aplicativo depende. (As classes do sistema são localizadas automaticamente e você raramente precisa se preocupar com isso.) Para que a classe principal seja carregada corretamente, a JVM precisa localizar:

(Nota: as especificações JLS e JVM permitem que algum escopo de uma JVM carregue classes "preguiçosamente" e isso pode afetar quando uma exceção de carregador de classes é lançada.)

Razão # 3 - a classe foi declarada no pacote errado

Ocasionalmente acontece que alguém coloca um arquivo de código-fonte na pasta errada em sua árvore de código-fonte, ou eles deixam de fora a declaração package. Se você fizer isso em um IDE, o compilador do IDE informará sobre isso imediatamente. Da mesma forma, se você usar uma ferramenta de compilação Java decente, a ferramenta executará javac de uma maneira que detectará o problema. No entanto, se você criar seu código Java manualmente, poderá fazê-lo de tal maneira que o compilador não perceba o problema e o arquivo ".class" resultante não esteja no lugar que você espera que ele seja.

Ainda não consegue encontrar o problema?

Há muitas coisas para verificar, e é fácil perder alguma coisa. Tente adicionar a opção -Xdiag à linha de comando Java (como a primeira coisa após Java). Ele irá mostrar várias coisas sobre o carregamento da classe, e isso pode oferecer pistas sobre qual é o problema real.

Além disso, considere possíveis problemas causados ​​pela cópia e colagem de caracteres invisíveis ou não-ASCII de sites, documentos e assim por diante. E considere "homoglifos", se duas letras ou símbolos parecem iguais ... mas não são.


A sintaxe Java -jar <jar file>

A sintaxe alternativa usada para arquivos JAR "executáveis" é a seguinte:

  Java [ <option> ... ] -jar <jar-file-name> [<argument> ...]

por exemplo.

  Java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred

Nesse caso, o nome da classe de ponto de entrada (ou seja, com.acme.example.ListUser) e o caminho de classe são especificados no MANIFESTO do arquivo JAR.


IDEs

Um Java típico IDE tem suporte para executar aplicativos Java na própria JVM IDE ou em uma JVM filha. Estes são geralmente imunes a esta exceção particular, porque o IDE usa seus próprios mecanismos para construir o classpath de tempo de execução, identificar a classe principal e criar a linha de comando Java.

No entanto, ainda é possível que essa exceção ocorra, se você fizer as coisas por trás da parte traseira do IDE. Por exemplo, se você configurou anteriormente um Disparador de Aplicativos para seu aplicativo Java no Eclipse e, em seguida, moveu o arquivo JAR contendo a classe "principal" para um local diferente no sistema de arquivos sem informar o Eclipse O Eclipse lançaria a JVM inconscientemente com um caminho de classe incorreto.

Em resumo, se você obtiver esse problema em um IDE, verifique se há coisas como estado obsoleto IDE, referências de projeto quebradas ou configurações de inicialização interrompidas.

Também é possível que um IDE simplesmente fique confuso. Os IDE são extremamente complicados, incluindo muitas partes interativas. Muitas dessas partes adotam várias estratégias de cache para tornar o IDE como um todo responsivo. Às vezes, isso pode dar errado e um possível sintoma é problemas ao iniciar aplicativos. Se você suspeitar que isso possa estar acontecendo, vale a pena reiniciar seu IDE.


Outras referências

1051
Stephen C

Se seu nome de código-fonte for HelloWorld.Java, seu código compilado será HelloWorld.class.

Você receberá esse erro se o chamar usando:

Java HelloWorld.class

Em vez disso, use isto:

Java HelloWorld
208
panoet

Se suas classes estão em pacotes, você tem que cd para o diretório principal e executar usando o nome completo da classe (packageName.MainClassName).

Exemplo:

Minhas aulas estão aqui:

D:\project\com\cse\

O nome completo da minha turma principal é:

com.cse.Main

Então eu cd de volta ao diretório principal:

D:\project

Em seguida, emita o comando Java:

Java com.cse.Main
115
tharinduwijewardane

Se você definir a classe principal e o método main em uma package, deverá executá-la sobre o diretório hierárquico, usando o nome completo da classe (packageName.MainClassName).

Suponha que haja um arquivo de código-fonte (Main.Java):

package com.test;

public class Main {

    public static void main(String[] args) {
        System.out.println("salam 2nya\n");
    }
}

Para executar este código, você deve colocar Main.Class no pacote como diretório ./com/test/Main.Java. E no diretório raiz, use Java com.test.Main.

49
M-Razavi

Quando o mesmo código funciona em um PC, mas mostra o erro em outro, a melhor solução que já encontrei está compilando como o seguinte:

javac HelloWorld.Java
java -cp . HelloWorld
38
Enamul Hassan

O que me ajudou foi especificar o classpath na linha de comando, por exemplo:

  1. Crie uma nova pasta, C:\temp

  2. Crie o arquivo Temp.Java em C:\temp, com a seguinte classe:

    public class Temp {
        public static void main(String args[]) {
            System.out.println(args[0]);
        }
    }
    
  3. Abra uma linha de comando na pasta C:\temp e escreva o seguinte comando para compilar a classe Temp:

    javac Temp.Java
    
  4. Execute a classe Java compilada, adicionando a opção -classpath para permitir que o JRE saiba onde encontrar a classe:

    Java -classpath C:\temp Temp Hello!
    
31
Celebes

De acordo com a mensagem de erro ("Não foi possível localizar ou carregar a classe principal"), há duas categorias de problemas:

  1. A classe principal não pôde ser found
  2. A classe principal não pôde ser carregada (este caso não está totalmente discutido na resposta aceita)

A classe principal não pode ser found quando há erro de digitação ou sintaxe incorreta no nome completo da classe ou não existe no caminho de classe fornecido .

A classe principal não pode ser carregada quando a classe não pode ser iniciada , normalmente a classe principal estende outra classe e essa classe não existe no caminho de classe fornecido.

Por exemplo:

public class YourMain extends org.Apache.camel.spring.Main

Se a mola de camelo não estiver incluída, este erro será reportado.

24
Xiao Peng - ZenUML.com

Às vezes o que pode estar causando o problema não tem nada a ver com a classe principal, e eu tive que descobrir isso da maneira mais difícil. Foi uma biblioteca referenciada que eu mudei e me deu o seguinte:

Não foi possível encontrar ou carregar a classe principal xxx Linux

Acabei de excluir essa referência, adicionei novamente e funcionou bem novamente.

14
Eduardo Dennis

Eu tive um erro nesse caso:

Java -cp lib.jar com.mypackage.Main

Funciona com ; para Windows e : para Unix:

Java -cp lib.jar; com.mypackage.Main
13
Yamahar1sp

Tente -Xdiag .

A resposta de Steve C cobre os casos possíveis, mas às vezes para determinar se a classe não pode ser foundou loaded pode não ser tão fácil. Use Java -Xdiag (desde o JDK 7). Isto imprime um stacktrace Nice que fornece uma sugestão para o que significa a mensagem Could not find or load main class.

Por exemplo, ele pode apontar para outras classes usadas pela classe principal que não puderam ser encontradas e impediram que a classe principal fosse carregada.

12
jan.supol

Use este comando:

Java -cp . [PACKAGE.]CLASSNAME

Exemplo: Se o seu nome de classe for Hello.class criado a partir de Hello.Java, use o comando abaixo:

Java -cp . Hello

Se o seu arquivo Hello.Java estiver dentro do pacote com.demo, use o comando abaixo

Java -cp . com.demo.Hello

Com o JDK 8 muitas vezes acontece que o arquivo de classe está presente na mesma pasta, mas o comando Java espera o classpath e por esta razão nós adicionamos-cp .para pegar a pasta atual como referência para o classpath.

12
shaILU

Neste caso você tem:

Não foi possível encontrar ou carregar a classe principal? Classpath

É porque você está usando "-classpath", mas o traço não é o mesmo traço usado por Java no comando Prompt. Eu tive esse problema copiando e colando de Notepad para cmd.

9
Nathan Williams

No meu caso, o erro apareceu porque eu tinha fornecido o nome do arquivo de origem em vez do nome da classe.

Precisamos fornecer o nome da classe contendo o método main ao interpretador.

7
KawaiKx

Passei um bom tempo tentando resolver esse problema. Eu pensei que eu estava de alguma forma definindo meu classpath incorretamente, mas o problema foi que eu digitei:

Java -cp C:/Java/MyClasses C:/Java/MyClasses/utilities/myapp/Cool  

ao invés de:

Java -cp C:/Java/MyClasses utilities/myapp/Cool   

Eu pensei que o significado de totalmente qualificado significava incluir o nome do caminho completo em vez do nome completo do pacote.

6
mathewbruens

enter image description here

Localização do arquivo de classe: C:\test\com\company

Nome do arquivo: Main.class

Nome completo da classe: com.company.Main

Comando da linha de comando:

Java  -classpath "C:\test" com.company.Main

Observe aqui que o caminho de classe NÃO inclui\com\company

6
developer747

Isso pode ajudá-lo se o seu caso é especificamente como o meu: como um iniciante eu também corri para este problema quando tentei executar um programa em Java.

Eu compilei assim:

javac HelloWorld.Java

E eu tentei rodar também com a mesma extensão:

Java Helloworld.Java

Quando eu removi o .Java e reescrevi o comando como Java HelloWorld, o programa rodou perfeitamente. :)

5
Ramesh Pareek

O que resolveu o problema no meu caso foi:

Clique com o botão direito do mouse no projeto/classe que você deseja executar e, em seguida, Run As-> Run Configurations. Em seguida, você deve corrigir sua configuração existente ou adicionar novos da seguinte maneira:

abra a aba Classpath, clique no botão Advanced... e adicionebin folder do seu projeto.

5
syntagma

Todas as respostas aqui são direcionadas para usuários do Windows. Para Mac, o separador do caminho de classe é :, não ;. Como um erro ao definir o caminho de classe usando ; não é lançado, isso pode ser difícil de descobrir se vier do Windows para o Mac.

Aqui está o comando Mac correspondente:

Java -classpath ".:./lib/*" com.test.MyClass

Onde neste exemplo o pacote é com.test e uma pasta lib também deve ser incluída no classpath.

5
blue-sky

Primeiro defina o caminho usando este comando;

set path="paste the set path address"

Então você precisa carregar o programa. Digite "cd (nome da pasta)" na unidade armazenada e compile-a. Por exemplo, se o meu programa armazenado na unidade D, digite "D:" pressione enter e digite "cd (nome da pasta)".

5
arun

Se você usar Maven para construir o arquivo JAR, por favor, certifique-se de especificar a classe principal no arquivo pom.xml:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
5
Junchen Liu

No Windows, coloque .; no valor CLASSPATH no começo.

O . (ponto) significa "procurar no diretório atual". Esta é uma solução permanente.

Além disso, você pode definir "uma vez" com set CLASSPATH=%CLASSPATH%;.. Isso durará enquanto sua janela cmd estiver aberta.

4
Nenad Bulatovic

Eu tive o mesmo problema e finalmente encontrei o meu erro :) Eu usei este comando para compilar e funcionou corretamente.

javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.Java

mas este comando não funcionou para mim (não foi possível encontrar ou carregar qrcode da classe principal)

Java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode

Por fim, acabei de adicionar o caractere ':' no final do caminho de classe e o problema foi resolvido.

Java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode

)

4
Omid Mohebbi

Este é um caso específico, mas desde que cheguei a esta página procurando uma solução e não a encontrei, adicionarei aqui.

O Windows (testado com 7) não aceita caracteres especiais (como á) em classes e nomes de pacotes. Linux faz, no entanto.

Descobri isso quando construí um .jar no NetBeans e tentei executá-lo na linha de comando. Ele foi executado no NetBeans, mas não na linha de comando.

4
GuiRitter

Você realmente precisa fazer isso da pasta src. Lá você digita a seguinte linha de comando:

[name of the package].[Class Name] [arguments]

Digamos que sua classe se chame CommandLine.class, e o código se parece com isto:

package com.tutorialspoint.Java;

    /**
     * Created by mda21185 on 15-6-2016.
     */

    public class CommandLine {
        public static void main(String args[]){
            for(int i=0; i<args.length; i++){
                System.out.println("args[" + i + "]: " + args[i]);
            }
        }
    }

Então você deve cd para a pasta src e o comando que você precisa para executar ficaria assim:

Java com.tutorialspoint.Java.CommandLine this is a command line 200 -100

E a saída na linha de comando seria:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
3
mdarmanin

Às vezes, em alguns compiladores on-line que você pode ter tentado, você obterá este erro se não escrever public class [Classname], mas apenas class [Classname].

3
lor

Ao executar a Java com a opção -cp, conforme anunciado no Windows PowerShell, você pode receber um erro semelhante a:

The term `ClassName` is not recognized as the name of a cmdlet, function, script ...

Para que o PowerShell aceite o comando, os argumentos da opção -cp devem estar contidos entre aspas, como em:

Java -cp 'someDependency.jar;.' ClassName

Formar o comando dessa maneira deve permitir que Java processe os argumentos do caminho de classe corretamente.

3
Chezzwizz

Também enfrentei erros semelhantes ao testar uma conexão JDBC do Java MongoDB. Eu acho que é bom resumir minha solução final em suma, para que no futuro qualquer um possa olhar diretamente para os dois comandos e seja bom prosseguir.

Suponha que você esteja no diretório em que seu arquivo Java e dependências externas (arquivos JAR) existem.

compilar:

javac -cp mongo-Java-driver-3.4.1.jar JavaMongoDBConnection.Java
  • -cp - argumento do caminho de classe; passar todos os arquivos JAR dependentes um por um
  • * .Java - Este é o arquivo de classe Java que possui o método main. sdsd

Corre:

Java -cp mongo-Java-driver-3.4.1.jar: JavaMongoDBConnection
  • Por favor, observe os dois pontos (Unix)/vírgula (Windows) depois que todos os arquivos JAR de dependência terminarem
  • No final, observe o nome da classe principal sem nenhuma extensão (no .class ou .Java)
3
khichar.anil

Certo, muitas respostas já, mas ninguém mencionou o caso em que a permissão de arquivo pode ser o culpado. Ao executar o usuário não tem acesso ao arquivo jar ou a um dos diretórios do caminho. Por exemplo, considere:

Arquivo Jar em /dir1/dir2/dir3/myjar.jar

User1 whow possui o jar pode fazer:

# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar

Mas ainda não funciona:

# Running as User2
Java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram

Isso ocorre porque o usuário em execução (User2) não tem acesso a dir1, dir2 ou javalibs ou dir3. Isso pode deixar alguém maluco quando o User1 pode ver os arquivos e pode acessá-los, mas o erro ainda acontece para o User2

3
biocyberman

No meu caso, recebi o erro porque misturei nomes de pacotes UPPER e minúsculos em um sistema Windows 7. Alterar os nomes dos pacotes para todas as minúsculas resolveu o problema. Observe também que nesse cenário, não recebi nenhum erro ao compilar o arquivo .Java em um arquivo .class; ele simplesmente não funcionaria do mesmo diretório (sub-sub-sub-sub).

2
Howard007

Em Java, quando você às vezes executa a JVM a partir da linha de comando usando o executável Java e está tentando iniciar um programa a partir de um arquivo de classe com public static void main (PSVM), você pode executar o erro abaixo mesmo que o parâmetro classpath a JVM é precisa e o arquivo de classe está presente no caminho de classe:

Error: main class not found or loaded

Isso acontece se o arquivo de classe com o PSVM não puder ser carregado. Uma possível razão para isso é que a classe pode estar implementando uma interface ou estendendo outra classe que não esteja no caminho de classe. Normalmente, se uma classe não estiver no caminho de classe, o erro lançado indica como tal. Mas, se a classe em uso for estendida ou implementada, o Java não poderá carregar a própria classe.

Referência: https://www.computingnotes.net/Java/error-main-class-not-found-or-loaded/

2
Anandaraja Ravi

Não consegui resolver este problema com as soluções aqui apresentadas (embora a resposta indicada tenha, sem dúvida, resolvido os meus conceitos). Eu enfrentei esse problema duas vezes e cada vez tentei soluções diferentes (no IDE do Eclipse).

  • Em primeiro lugar, me deparei com vários métodos main em diferentes classes do meu projeto. Então, eu tinha deletado o método main das classes subseqüentes.
  • Em segundo lugar, tentei seguir a solução:
    1. Clique com o botão direito no meu diretório principal do projeto.
    2. Cabeça a fonte, em seguida, limpar e ficar com as configurações padrão e em Concluir. Depois de algumas tarefas em segundo plano, você será direcionado para o diretório principal do projeto.
    3. Depois disso, fechei meu projeto, reabri e, finalmente, resolvi meu problema.
2
Anus Kaleem

Eu tive uma estranha.

Erro: Não foi possível encontrar ou carregar a classe principal mypackage.App

Descobri que eu tinha uma configuração pom (pai) no pom.xml do meu projeto (o pom.xml do meu projeto estava apontando para um pom.xml pai) e o relativePath estava off/errado.

Abaixo está uma parte do pom.xml do meu projeto

<parent>
    <groupId>myGroupId</groupId>
    <artifactId>pom-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../badPathHere/pom.xml</relativePath>
</parent> 

Depois que resolvi o pom relativePath, o erro desapareceu.

Vai saber.

2
granadaCoder

Eu recebi este erro depois de fazer mvn Eclipse:eclipse Isso estragou um pouco o meu arquivo .classpath.

Tive que mudar as linhas em .classpath de

<classpathentry kind="src" path="src/main/Java" including="**/*.Java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.Java"/>

para

<classpathentry kind="src" path="src/main/Java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />
2
Jaanus

Às vezes, é melhor remover os arquivos JAR adicionados e adicioná-los novamente com as devidas ajudas de compilação. Para mim, tem sido um problema regular e eu segui a mesma abordagem:

  1. Coloque todos os arquivos JAR referidos em uma pasta, jarAddOns, e copie-o em um local seguro
  2. Agora, a partir do Eclipse (ou do seu IDE), remova os arquivos JAR.
  3. Mova a pasta do projeto inteiro do espaço de trabalho para um local seguro
  4. Reinicie o Eclipse (seu IDE)
  5. Agora importe o diretório do seu projeto do local seguro.
  6. Adicione os arquivos JAR ao seu projeto a partir da pasta jarAddOns (salva anteriormente em local seguro)
  7. Construir o projeto, adicionar arquivos JAR e aplicar
  8. Agora execute o projeto. Não deve mostrar o erro.
1
nilakantha singh deo

Se esse problema estiver relacionado ao Eclipse:

Tente adicionar projeto ao seu caminho de classe.

veja abaixo a imagem:

 enter image description here

Esse método funcionou para mim.

1
Tunde Pizzle

No contexto do IDE desenvolvimento (Eclipse, NetBeans ou qualquer outro) você precisa configurar suas propriedades de projeto para ter uma classe principal, para que seu IDE saiba onde a classe principal está localizada ser executado quando você apertar "Play".

  1. Clique com o botão direito do mouse no seu projeto e, em seguida, Propriedades
  2. Vá para a categoria Executar e selecione sua Classe Principal
  3. Acerte o Run botão.

Enter image description here

1
cepix

Por padrão, o Java usa ., o diretório de trabalho atual, como o padrão CLASSPATH. O que isto significa é que quando você digita um comando no prompt, por exemplo Java MyClass, o comando é interpretado como se você tivesse o tipo Java -cp . MyClass. Você viu esse ponto entre -cp e MyClass? ( cp é curto para o mais longo classpath opção)

Isso é suficiente para a maioria dos casos e as coisas parecem funcionar muito bem até que em algum momento você tente adicionar um diretório à sua CLASSPATH. Na maioria dos casos, quando os programadores precisam fazer isso, eles simplesmente executam um comando como set CLASSPATH=path\to\some\dir. Esse comando cria uma nova variável de ambiente chamada CLASSPATH com o valor path\to\some\dir ou substitui seu valor por path\to\some\dir se CLASSPATH já foi definido antes.

Quando isso é feito, agora você tem uma variável de ambiente CLASSPATH e o Java não usa mais seu classpath padrão (.), mas aquele que você definiu. Então, no dia seguinte, você abre seu editor, escreve algum programa Java, cd no diretório onde você o salvou, compila e tenta executá-lo com o comando Java MyClass, e você é recebido com uma boa saída: Não foi possível encontrar ou carregar a classe principal ... (Se os seus comandos estavam funcionando bem antes e agora você está obtendo essa saída, esse pode ser o caso para você).

O que acontece é que quando você executa o comando Java MyClass, o Java procura pelo arquivo de classe chamado MyClass no diretório ou diretórios que você definiu em sua CLASSPATH e não em seu diretório de trabalho atual para que ele não encontre seu arquivo de classe e, portanto, .

O que você precisa fazer é adicionar . ao seu caminho de classe novamente, o que pode ser feito com o comando set CLASSPATH=%CLASSPATH%;. (observe o ponto após o ponto-e-vírgula). Em inglês simples, esse comando diz "Escolha o que foi inicialmente o valor de CLASSPATH (%CLASSPATH%), adicione . a ele (;.) e atribua o resultado de volta a CLASSPATH".

E voila , você pode mais uma vez usar seu comando Java MyClass como de costume.

0
Robert Odoch