Um problema comum que os novos desenvolvedores Java experimentam é que seus programas falham ao executar com a mensagem de erro: Could not find or load main class ...
O que isso significa, o que causa e como você deve corrigi-lo?
Um problema comum que os novos desenvolvedores Java experimentam é que seus programas falham ao executar com a mensagem de erro: Could not find or load main class ...
O que isso significa, o que causa e como você deve corrigi-lo?
Respostas:
java <class-name>
sintaxe do comandoPrimeiro de tudo, você precisa entender a maneira correta de iniciar um programa usando o comando java
(ou javaw
).
A sintaxe normal 1 é esta:
java [ <options> ] <class-name> [<arg> ...]
onde <option>
é uma opção de linha de comando (começando com um caractere "-"), <class-name>
é um nome de classe Java totalmente qualificado e <arg>
é um argumento arbitrário de linha de comando que é passado para o seu aplicativo.
1 - Existem outras sintaxes descritas no final desta resposta.
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 java
comando permitem usar barras em vez de pontos; por exemplo
packagename/packagename2/packagename3/ClassName
que (confusamente) se parece com um nome de caminho de arquivo, mas não é um. Observe que o termo nome completo é terminologia Java padrão ... não é algo que acabei de inventar para confundir você :-)
Aqui está um exemplo de como um java
comando deve ser:
java -Xmx100m com.acme.example.ListUsers fred joe bert
O exemplo acima fará com que o java
comando faça o seguinte:
com.acme.example.ListUsers
classe.main
método com assinatura , tipo de retorno e modificadores fornecidos por public static void main(String[])
. (Observe que o nome do argumento do método NÃO faz parte da assinatura.)String[]
.Quando você recebe a mensagem "Não foi possível encontrar ou carregar a classe principal ...", isso significa que a primeira etapa falhou. O java
comando não conseguiu encontrar a classe. E, de fato, o "..." na mensagem será o nome completo da classe que você java
está procurando.
Então, por que não foi possível encontrar a classe?
A primeira causa provável é que você pode ter fornecido o nome de classe errado. (Ou ... o nome certo da classe, mas na forma errada.) Considerando o exemplo acima, aqui estão várias maneiras erradas de 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
, então você deve usar o nome completo da classe, incluindo o nome do pacote no java
comando; 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 (exceto Java 11 ou posterior; veja abaixo)
java ListUser.java
Exemplo # 6 - você esqueceu completamente o nome da classe
java lots of arguments
A segunda causa provável é que o nome da classe está correto, mas que o java
comando não pode encontrar a classe. Para entender isso, você precisa entender o conceito de "caminho de classe". Isso é bem explicado pela documentação do Oracle:
java
documentação do comandoEntão ... se você especificou o nome da classe corretamente, a próxima coisa a verificar é se você especificou o caminho da classe corretamente:
java
comando. Verifique se os nomes dos diretórios e dos arquivos JAR estão corretos.java
comando.;
no Windows e :
nos outros. Se você usar o separador errado para sua plataforma, não receberá uma mensagem de erro explícita. Em vez disso, receberá um arquivo ou diretório inexistente no caminho que será ignorado silenciosamente. .)Quando você coloca um diretório no caminho de classe, ele corresponde nocionalmente à raiz do espaço para nome qualificado. As classes estão localizadas na estrutura de diretórios abaixo dessa raiz, mapeando o nome completo para um nome de caminho . Por exemplo, se "/ usr / local / acme / classes" estiver no caminho da classe, quando a JVM procurar uma classe chamada com.acme.example.Foon
, 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 encontrar a classe.
Se sua classe FQN for com.acme.example.Foon
, a JVM procurará "Foon.class" no diretório "com / acme / example":
Se sua estrutura de diretórios não corresponder à nomeação do pacote conforme o padrão acima, a JVM não encontrará sua classe.
Se você tentar renomear uma classe movendo-a, isso também falhará ... mas o rastreamento de pilha de exceção será diferente. É possível dizer algo como isto:
Caused by: java.lang.NoClassDefFoundError: <path> (wrong name: <name>)
porque o FQN no arquivo de classe não corresponde ao que o carregador de classes espera encontrar.
Para dar um exemplo concreto, supondo que:
com.acme.example.Foon
aula,/usr/local/acme/classes/com/acme/example/Foon.class
,/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:
-classpath
opção pode ser abreviada -cp
na maioria dos releases Java. Verifique as respectivas entradas manuais para java
, javac
e assim por diante.O caminho de classe precisa incluir todas as outras classes (não pertencentes ao sistema) 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 algum escopo para uma JVM carregar classes "preguiçosamente" e isso pode afetar quando uma exceção do carregador de classes é lançada.)
Ocasionalmente, alguém coloca um arquivo de código-fonte na pasta errada em sua árvore de código-fonte ou deixa de fora a package
declaração. Se você fizer isso em um IDE, o compilador do IDE informará sobre isso imediatamente. Da mesma forma, se você usar uma ferramenta decente de construção Java, a ferramenta será executada de javac
maneira a detectar o problema. No entanto, se você criar seu código Java manualmente, poderá fazê-lo de forma que o compilador não perceba o problema e o arquivo ".class" resultante não esteja no local que você espera.
Há muitas coisas para verificar e é fácil perder alguma coisa. Tente adicionar a -Xdiag
opção à java
linha de comando (como a primeira coisa a seguir java
). Ele produzirá várias coisas sobre o carregamento de classes, e isso pode oferecer pistas sobre qual é o verdadeiro problema.
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", duas letras ou símbolos parecem iguais ... mas não são
Finalmente, você pode aparentemente ter esse problema se tentar iniciar a partir de um arquivo JAR com assinaturas incorretas (META-INF/*.SF)
.
java
Existem três sintaxes alternativas para o lançamento de programas Java usando o java command
.
1) A sintaxe usada para iniciar um arquivo JAR "executável" é a seguinte:
java [ <options> ] -jar <jar-file-name> [<arg> ...]
por exemplo
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
O nome da classe do ponto de entrada (ou seja com.acme.example.ListUser
) e o caminho da classe são especificados no MANIFEST do arquivo JAR.
2) A sintaxe para iniciar um aplicativo a partir de um módulo (Java 9 e posterior) é a seguinte:
java [ <options> ] --module <module>[/<mainclass>] [<arg> ...]
O nome da classe do ponto de entrada é definido por <module>
ele mesmo ou é fornecido pelo opcional <mainclass>
.
3) A partir do Java 11, você pode compilar e executar um único arquivo de código-fonte e executá-lo com a seguinte sintaxe:
java [ <options> ] <sourcefile> [<arg> ...]
onde está (normalmente) um arquivo com o sufixo ".java".
Para mais detalhes, consulte a documentação oficial do java
comando para o release Java que você está usando.
Um Java IDE típico tem suporte para executar aplicativos Java na própria JVM IDE ou em uma JVM filha. Eles geralmente são imunes a essa exceção específica, porque o IDE usa seus próprios mecanismos para construir o caminho de classe do tempo de execução, identificar a classe principal e criar a java
linha de comando.
No entanto, ainda é possível que essa exceção ocorra, se você fizer coisas atrás da parte traseira do IDE. Por exemplo, se você configurou anteriormente um Disparador de Aplicativos para seu aplicativo Java no Eclipse e moveu o arquivo JAR que contém a classe "main" para um local diferente no sistema de arquivos sem informar o Eclipse , o Eclipse ativaria involuntariamente a JVM com um caminho de classe incorreto.
Em resumo, se você encontrar esse problema em um IDE, verifique coisas como estado antigo do IDE, referências de projetos ou configurações do iniciador interrompidas.
Também é possível que um IDE simplesmente fique confuso. Os IDE são peças de software extremamente complicadas, que incluem muitas partes em interação. 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 sintoma possível são problemas ao iniciar aplicativos. Se você suspeitar que isso possa estar acontecendo, vale a pena tentar outras coisas, como reiniciar o IDE, reconstruir o projeto e assim por diante.
java -cp ../third-party-library.jar com.my.package.MyClass
; Isso não funciona, em vez disso, é necessário adicionar a pasta local para o caminho da classe, bem como (separados por :
, como este: java -cp ../third-party-library.jar:. com.my.package.MyClass
, então ele deve funcionar
java
não diz que não encontra uma classe importada, mas sim a classe principal que você está tentando executar. Isso é enganador, embora eu tenha certeza de que há uma razão para isso. Eu tive o caso em que java
sabia exatamente onde está minha classe, no entanto, ela não conseguiu encontrar uma das classes importadas. Em vez de dizer isso, reclamou de não encontrar minha classe principal. Realmente, irritante.
Se o 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 o seguinte:
java HelloWorld
javac TestCode.java
seguido porjava TestCode
java -classpath . HelloWorld
Se suas classes estiverem em pacotes , você deverá cd
acessar o diretório raiz do seu projeto 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 classe principal é:
com.cse.Main
Então, cd
volto ao diretório raiz do projeto:
D:\project
Em seguida, emita o java
comando:
java com.cse.Main
Esta resposta é para resgatar os programadores iniciantes em Java da frustração causada por um erro comum. Recomendamos que você leia a resposta aceita para obter um conhecimento mais profundo sobre o caminho de classe java.
Se você definir a classe principal e o método principal em apackage
, deverá executá-lo no 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
.
Quando o mesmo código funciona em um PC, mas mostra o erro em outro, a melhor solução que eu já encontrei é compilar da seguinte maneira:
javac HelloWorld.java
java -cp . HelloWorld
javac -classpath . HelloWorld.java
teria funcionado! E essa é uma solução melhor no seu caso.
O que me ajudou foi especificar o caminho de classe na linha de comando, por exemplo:
Criar uma nova pasta, C:\temp
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]);
}
}
Abra uma linha de comando na pasta C:\temp
e escreva o seguinte comando para compilar a classe Temp:
javac Temp.java
Execute a classe Java compilada, incluindo a -classpath
opção para informar ao JRE onde encontrar a classe:
java -classpath C:\temp Temp Hello!
java
não estava olhando para $ CLASSPATH (porque você usou -classpath ou -jar) ou 2) a configuração do caminho de classe não foi definida no ambiente que não estava em vigor no contexto em que java
estava. corre; por exemplo, porque você não "originou" o arquivo onde adicionou os comandos setenv no shell direito.
De acordo com a mensagem de erro ("Não foi possível encontrar ou carregar a classe principal"), existem duas categorias de problemas:
Não foi possível encontrar a classe principal quando há erro de digitação ou sintaxe incorreta no nome completo da classe ou ela não existe no caminho de classe fornecido .
Não foi possível carregar a classe principal 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, esse erro será relatado.
extends
). Acabei de aprender da maneira mais difícil que quando a classe principal falha ao carregar porque estende outra que não pôde ser encontrada , o java não informa qual classe real não foi encontrada (diferente NoClassDefFoundError
). Então, sim, isso acontece, e é uma situação arrepiante quando você não sabe disso.
Eu tive um erro nesse caso:
java -cp lib.jar com.mypackage.Main
Funciona com o ;
Windows e o :
Unix:
java -cp lib.jar; com.mypackage.Main
Main
não está no arquivo JAR. -cp lib.jar;
significa a mesma coisa que, por exemplo, -cp lib.jar;.
o diretório atual está incluído no caminho de classe.
Tente -Xdiag .
A resposta de Steve C cobre bem os casos possíveis, mas às vezes determinar se a classe não foi encontrada ou carregada pode não ser tão fácil. Use java -Xdiag
(desde o JDK 7). Isso imprime um bom rastreamento de pilha, que fornece uma dica sobre o Could not find or load main class
significado da mensagem.
Por exemplo, ele pode indicar outras classes usadas pela classe principal que não foram encontradas e impediu o carregamento da classe principal.
Use este comando:
java -cp . [PACKAGE.]CLASSNAME
Exemplo: Se o seu nome de classe for Hello.class criado a partir do 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 java
comando espera classpath e, por esse motivo, adicionamos -cp .
a pasta atual como referência para classpath.
-cp .
é desnecessário, porque se $CLASSPATH
não estiver definido, .
será o caminho de classe padrão.
echo %CLASSPATH%
gerado?) E não, não consigo verificar porque não tenho um PC com Windows.
À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:
Não foi possível encontrar ou carregar a classe principal xxx Linux
Acabei de excluir essa referência, adicionei-a novamente e funcionou bem novamente.
Neste exemplo, você tem:
Não foi possível encontrar ou carregar a classe principal ?
É porque você está usando "-classpath", mas o traço não é o mesmo usado java
no prompt de comando. Eu tive esse problema ao copiar e colar do bloco de notas para o cmd.
Eu tive o mesmo problema e finalmente encontrei 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 consegui encontrar ou carregar a classe principal qrcode
):
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
Finalmente, 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
No meu caso, o erro apareceu porque eu havia fornecido o nome do arquivo de origem em vez do nome da classe.
Precisamos fornecer o nome da classe que contém o método principal para o intérprete.
Isso pode ajudá-lo se o seu caso for especificamente como o meu: como iniciante, também encontrei esse problema ao tentar executar um programa Java.
Eu compilei assim:
javac HelloWorld.java
E tentei rodar também com a mesma extensão:
java Helloworld.java
Quando removi .java
e reescrevi o comando java HelloWorld
, o programa funcionou perfeitamente. :)
Todas as respostas aqui são direcionadas aos usuários do Windows, ao que parece. Para Mac, o separador de caminho de classe é :
, não ;
. Como um erro ao definir o caminho de classe usando;
não é exibido, pode ser difícil descobrir se ele vem do Windows para o Mac.
Aqui está o comando Mac correspondente:
java -classpath ".:./lib/*" com.test.MyClass
Onde neste exemplo o pacote está com.test
e uma lib
pasta também deve ser incluída no caminho de classe.
/*
é necessário?
Local 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 da classe NÃO inclui \ com \ company
Passei um tempo decente tentando resolver esse problema. Eu pensei que estava de alguma forma configurando meu caminho de classe 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 pretendia incluir o nome completo do caminho em vez do nome completo do pacote.
utilities.myapp.Cool
ou seja o nome do pacote, se houver.
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 meu programa estiver armazenado na unidade D, digite "D:" pressione enter e digite "cd (nome da pasta)".
if "cd" helps then it by luck rather than by judgement
. Isso está errado (eu acredito), pois o java usa o diretório atual .
como parte do caminho de classe por padrão.
O que corrigiu o problema no meu caso foi:
Clique com o botão direito do mouse no projeto / classe que deseja executar e, em seguida Run As
->Run Configurations
. Em seguida, você deve corrigir sua configuração existente ou adicionar novo da seguinte maneira:
abra a Classpath
guia, clique no Advanced...
botão e adicione a bin
pasta do seu projeto.
Se você usar o Maven para criar o arquivo JAR, especifique 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>
Este é um caso específico, mas como cheguei a esta página procurando uma solução e não a encontrei, vou adicioná-la aqui.
O Windows (testado com 7) não aceita caracteres especiais (como á
) nos nomes de classe e pacote. O Linux, no entanto.
Eu descobri isso quando criei um .jar
no NetBeans e tentei executá-lo na linha de comando. Ele foi executado no NetBeans, mas não na linha de comando.
No Windows, coloque .;
o valor CLASSPATH no início.
O . (ponto) significa "procurar no diretório atual". Esta é uma solução permanente.
Além disso, você pode configurá-lo "uma vez" com o conjunto CLASSPATH=%CLASSPATH%;.
. Isso durará enquanto a janela do cmd estiver aberta.
Você realmente precisa fazer isso a partir da src
pasta Lá você digita a seguinte linha de comando:
[name of the package].[Class Name] [arguments]
Digamos que sua classe seja chamada CommandLine.class
e o código fique assim:
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]);
}
}
}
Em seguida, você deve cd
ir para a pasta src e o comando que você precisa executar terá a seguinte aparência:
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
cd
entrar src
e executar o comando java ../bin com.blah.blah.MyClass
que funcionou para mim. Então, obrigado pela dica!
Em Java, quando você executa a JVM às vezes na linha de comando usando o executável java e está tentando iniciar um programa a partir de um arquivo de classe com PSVM (public static void main), pode ocorrer o erro abaixo, mesmo que o parâmetro classpath para 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 PSVM não puder ser carregado. Uma razão possível para isso é que a classe pode estar implementando uma interface ou estendendo outra classe que não está no caminho de classe. Normalmente, se uma classe não estiver no caminho de classe, o erro gerado 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/
Ao executar o java
com a -cp
opção conforme anunciado no Windows PowerShell, você pode receber um erro parecido com:
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
Para que o PowerShell aceite o comando, os argumentos da -cp
opção devem estar entre aspas, como em:
java -cp 'someDependency.jar;.' ClassName
A formação do comando dessa maneira deve permitir que o Java processe os argumentos do caminho de classe corretamente.
Também enfrentei erros semelhantes ao testar uma conexão Java MongoDB JDBC. Eu acho que é bom resumir minha solução final em resumo, para que, no futuro, qualquer um possa analisar diretamente 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
Corre:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
JavaMongoDBConnection
não possui pacote e 2) você não altera o diretório. É, para dizer o mínimo, frágil. E, ao não explicar os problemas, levará os novatos a tentar essa abordagem em situações em que não funcionará . Em resumo, incentiva "técnicas de programação de vodu": en.wikipedia.org/wiki/Voodoo_programming
Tudo bem, já existem muitas respostas, mas ninguém mencionou o caso em que as permissões de arquivo podem ser as culpadas.
Ao executar, um usuário pode não ter acesso ao arquivo JAR ou a um dos diretórios do caminho. Por exemplo, considere:
Arquivo jar em /dir1/dir2/dir3/myjar.jar
O usuário1 que possui o arquivo JAR pode:
# 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 (Usuário2) não tem acesso a dir1, dir2 ou javalibs ou dir3. Isso pode deixar alguém louco quando o Usuário1 pode ver os arquivos e pode acessá-los, mas o erro ainda ocorre no Usuário2.
Eu recebi esse erro depois de fazer mvn eclipse:eclipse
Isso atrapalhou .classpath
um pouco meu arquivo.
Teve que mudar as linhas .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" />
Não consegui resolver esse problema com as soluções indicadas aqui (embora a resposta indicada tenha, sem dúvida, esclarecido meus conceitos). Eu enfrentei esse problema duas vezes e cada vez que tentei soluções diferentes (no Eclipse IDE).
main
métodos em diferentes classes do meu projeto. Então, eu apaguei omain
método das classes subseqüentes.main
métodos não solucionará o problema. Não há nada tecnicamente errado com um aplicativo que tenha vários pontos de entrada.