¿Qué significa "No se pudo encontrar o cargar la clase principal"?


Un problema común que experimentan los nuevos desarrolladores de Java es que sus programas no se ejecutan con el mensaje de error: Could not find or load main class ...

¿Qué significa esto, qué lo causa y cómo debe arreglarlo?

Author: Stephen C, 2013-08-07

30 answers

La sintaxis del comando java <class-name>

En primer lugar, debe comprender la forma correcta de iniciar un programa utilizando el comando java (o javaw).

La sintaxis normal1 es esto:

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

Donde <option> es una opción de línea de comandos (comenzando con un carácter" -"), <class-name> es un nombre de clase Java completamente calificado, y <argument> es un argumento de línea de comandos arbitrario que se pasa a su aplicación.
1 - Hay una segunda sintaxis para JAR" ejecutable" archivos que describiré en la parte inferior.

El nombre completo (FQN) para la clase se escribe convencionalmente como lo haría en el código fuente de Java; por ejemplo,

packagename.packagename2.packagename3.ClassName

Tenga en cuenta que el término nombre completo es la terminología estándar de Java ... no es algo que acabo de inventar para confundirte: -)

Aquí hay un ejemplo de cómo debería ser un comando java:

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

Lo anterior va a hacer que el comando java haga siguiente:

  1. Busca la versión compilada de la clase com.acme.example.ListUsers.
  2. Cargue la clase.
  3. Compruebe que la clase tiene un método main con la firma , devuelve el tipo y modificadores dados por public static void main(String[]). (Nota, el nombre del argumento method es NO parte de la firma.)
  4. Llama a ese método pasándole los argumentos de la línea de comandos ("fred", "joe", "bert") como un String[].

Razones por las que Java no puede encontrar clase

Cuando recibe el mensaje "No se pudo encontrar o cargar la clase principal ...", eso significa que el primer paso ha fallado. El comando java no fue capaz de encontrar la clase. Y de hecho, el"..."en el mensaje será el nombre de clase completo que java está buscando.

Entonces, ¿por qué podría ser incapaz de encontrar la clase?

Razón #1-cometiste un error con el argumento classname

La primera causa probable es que usted puede haber proporcionado el nombre de clase equivocado. (O ... el nombre de clase correcto, pero en la forma incorrecta. Considerando el ejemplo anterior, aquí una variedad de formas incorrectas para especificar el nombre de la clase:

  • Ejemplo # 1 - un nombre de clase simple:

    java ListUser
    

    Cuando la clase se declara en un paquete como com.acme.example, entonces debe usar el nombre de clase completo incluyendo el nombre del paquete en el comando java; por ejemplo,

    java com.acme.example.ListUser
    
  • Ejemplo # 2 - un nombre de archivo o ruta que un nombre de clase:

    java ListUser.class
    java com/acme/example/ListUser.class
    
  • Ejemplo # 3 - un nombre de clase con la carcasa incorrecta:

    java com.acme.example.listuser
    
  • Ejemplo # 4-un error tipográfico

    java com.acme.example.mistuser
    
  • Ejemplo # 5-un nombre de archivo de origen

    java ListUser.java
    
  • Ejemplo # 6-olvidaste completamente el nombre de la clase

    java lots of arguments
    

Razón # 2-la ruta de clase de la aplicación se especifica incorrectamente

La segunda causa probable es que el nombre de la clase es correcto, pero que el {[15]]} el comando no puede encontrar la clase. Para entender esto, necesitas entender el concepto de "classpath". Esto se explica bien por la documentación de Oracle:

So ... si ha especificado el nombre de la clase correctamente, lo siguiente que debe comprobar es que ha especificado el classpath correctamente:

  1. Lea los tres documentos enlazados arriba. (Sí ... LÉELOS. Es importante que un programador Java comprenda al menos los conceptos básicos de cómo funcionan los mecanismos Java classpath.)
  2. Mire la línea de comandos y / o la variable de entorno CLASSPATH que está en efecto cuando ejecuta el comando java. Compruebe que los nombres de directorio y los nombres de archivo JAR son correctos.
  3. Si hay nombres de ruta relativos en la ruta de clase, compruebe que se resuelven correctamente ... desde el directorio actual que está en vigor cuando se ejecuta el comando java.
  4. Compruebe que la clase (mencionada en el mensaje de error) se puede ubicar en la ruta de clase efectiva.
  5. Tenga en cuenta que la sintaxis de classpath es diferente para Windows frente a Linux y Mac OS. (El separador classpath es ; en Windows y : en los demás.)

Razón #2a-el directorio incorrecto está en el classpath

Cuando poner un directorio en la ruta de clase, teóricamente corresponde a la raíz del espacio de nombre calificado. Las clases se encuentran en la estructura de directorios debajo de esa raíz, asignando el nombre completo a una ruta. Por ejemplo, si "/usr/local/acme/classes" está en la ruta de acceso de la clase, entonces cuando la JVM busque una clase llamada com.acme.example.Foon, buscará un ".archivo "class" con esta ruta de acceso:

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

Si hubiera puesto "/ usr / local / acme / classes / com / acme / example " en el classpath, entonces la JVM no sería capaz de encontrar la clase.

Razón #2b - la ruta del subdirectorio no coincide con el FQN

Si su FQN de clases es com.acme.example.Foon, entonces la JVM va a buscar "Foon.clase " en el directorio "com / acme / example":

  • Si su estructura de directorios no coincide con el nombre del paquete según el patrón anterior, la JVM no encontrará su clase.

  • Si intenta cambiar el nombre de una clase moviéndola, eso fallará También... pero la excepción stacktrace será diferente.

Para dar un ejemplo concreto, suponiendo que:

  • desea ejecutar com.acme.example.Foon clase,
  • la ruta completa del archivo es /usr/local/acme/classes/com/acme/example/Foon.class,
  • su directorio de trabajo actual es /usr/local/acme/classes/com/acme/example/,

Entonces:

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

  • La opción -classpath se puede acortar a -cp en la mayoría de las versiones de Java. Compruebe las entradas manuales respectivas para java, javac y así en.
  • Piense cuidadosamente al elegir entre nombres de ruta absolutos y relativos en classpaths. Recuerde que un nombre de ruta relativo puede "romperse" si el directorio actual cambia.

Razón #2c-dependencias que faltan en el classpath

El classpath necesita incluir todas las otras (no del sistema) clases de las que depende su aplicación. (Las clases del sistema se ubican automáticamente, y rara vez necesita preocuparse por esto.) Para el principal clase para cargar correctamente, la JVM necesita encontrar:

  • la clase misma.
  • todas las clases e interfaces en la jerarquía de superclase (por ejemplo, ver esta pregunta)
  • todas las clases e interfaces a las que se hace referencia mediante declaraciones de variables o variables, o expresiones de llamada a métodos o acceso a campos.

(Nota: las especificaciones JLS y JVM permiten cierto margen para que una JVM cargue clases "perezosamente", y esto puede afectar cuando un classloader se lanza la excepción.)

Razón # 3-la clase ha sido declarada en el paquete incorrecto

De vez en cuando sucede que alguien pone un archivo de código fuente en el la carpeta incorrecta en su árbol de código fuente, o dejan fuera la declaración package. Si haces esto en un IDE, el compilador del IDE te lo dirá inmediatamente. Del mismo modo, si utiliza una herramienta de compilación Java decente, la herramienta se ejecutará javac de una manera que detectará el problema. Sin embargo, si construye su código Java a mano, puede hacerlo de tal manera que el compilador no note el problema, y el resultado".el archivo "class" no está en el lugar que esperas que esté.

¿Todavía no puedes encontrar el problema?

Hay muchas cosas que revisar, y es fácil perderse algo. Intente agregar la opción -Xdiag a la línea de comandos java (como lo primero después de java). Generará varias cosas sobre la carga de clases, y esto puede ofrecerle pistas sobre cuál es el verdadero problema ser.

También, considere los posibles problemas causados por copiar y pegar caracteres invisibles o no ASCII de sitios web, documentos, etc. Y considerar "homógrafos", fueron dos letras o símbolos tienen el mismo aspecto ... pero no lo son.


La sintaxis java -jar <jar file>

La sintaxis alternativa utilizada para los archivos JAR "ejecutables" es la siguiente:

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

Por ejemplo

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

En este caso se especifica el nombre de la clase de punto de entrada (es decir, com.acme.example.ListUser) y la ruta de clase en el MANIFIESTO del archivo JAR.


IDEs

Un IDE Java típico tiene soporte para ejecutar aplicaciones Java en la propia JVM IDE o en una JVM hija. Estos son generalmente inmunes a esta excepción en particular, porque el IDE usa sus propios mecanismos para construir el classpath de tiempo de ejecución, identificar la clase principal y crear la línea de comandos java.

Sin embargo, todavía es posible que esta excepción ocurra, si haces cosas a espaldas del IDE. Por ejemplo, si previamente ha configurado un Lanzador de aplicaciones para su aplicación Java en Eclipse, y luego movió el archivo JAR que contiene la clase "main" a un lugar diferente en el sistema de archivos sin decirle a Eclipse, Eclipse lanzaría la JVM sin saberlo con una ruta de clase incorrecta.

En resumen, si obtienes este problema en un IDE, comprueba si hay cosas como estado IDE obsoleto, referencias de proyectos rotas o configuraciones de lanzador rotas.

También es posible para un IDE para confundirse. Los IDE son piezas de software enormemente complicadas que comprenden muchas partes que interactúan. Muchas de estas partes adoptan varias estrategias de almacenamiento en caché para hacer que el IDE en su conjunto sea responsivo. Estos a veces pueden salir mal, y un posible síntoma son los problemas al iniciar aplicaciones. Si sospecha que esto podría estar sucediendo, vale la pena reiniciar su IDE.


Otras referencias

 922
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-13 16:53:51

Si su nombre de código fuente es HelloWorld.java, su código compilado será HelloWorld.class.

Obtendrá ese error si lo llama usando:

java HelloWorld.class

En su lugar, use esto:

java HelloWorld
 190
Author: panoet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-04 14:06:24

Si sus clases están en paquetes entonces tiene que cd al directorio principal y ejecutar usando el nombre completo de la clase (Nombrepaquete.MainClassName).

Ejemplo:

Mis clases están aquí:

D:\project\com\cse\

El nombre completo de mi clase principal es:

com.cse.Main

Así que cd vuelvo al directorio principal:

D:\project

Luego emita el comando java:

java com.cse.Main
 101
Author: tharinduwijewardane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 16:54:38

Si su método principal está en la clase bajo un paquete, debe ejecutarlo sobre el directorio jerárquico.

Supongamos que hay un archivo de código fuente (Main.java):

package com.test;

public class Main {

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

Para ejecutar este código, debe colocar Main.Class en el paquete como directorio ./com/test/Main.Java. Y en el directorio raíz use java com.test.Main.

 44
Author: M-Razavi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 17:32:03

Cuando el mismo código funciona en un PC, pero muestra el error en otro, la mejor solución que he encontrado es compilar de la siguiente manera:

javac HelloWorld.java
java -cp . HelloWorld
 36
Author: Enamul Hassan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 16:56:52

Lo que me ayudó fue especificar el classpath en la línea de comandos, por ejemplo:

  1. Crear una nueva carpeta, C:\temp

  2. Crear archivo Temp.java en C:\temp, con la siguiente clase en él:

    public class Temp {
        public static void main(String args[]) {
            System.out.println(args[0]);
        }
    }
    
  3. Abra una línea de comandos en la carpeta C:\temp, y escriba el siguiente comando para compilar la clase Temp:

    javac Temp.java
    
  4. Ejecute la clase Java compilada, agregando la opción -classpath para que JRE sepa dónde encontrar clase:

    java -classpath C:\temp Temp Hello!
    
 27
Author: Celebes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 16:51:55

De acuerdo con el mensaje de error ("No se pudo encontrar o cargar la clase principal"), hay dos categorías de problemas:

  1. No se pudo encontrar la clase principal
  2. No se pudo cargar la clase principal (este caso no se discute completamente en la respuesta aceptada)

No se pudo encontrar la clase principal cuando hay error tipográfico o sintaxis incorrecta en el nombre de clase completoo no existe en la ruta de clase proporcionada.

Clase principal no se pudo cargar cuando la clase no se puede iniciar, normalmente la clase principal extiende otra clase y esa clase no existe en el classpath proporcionado.

Por ejemplo:

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

Si camel-spring no está incluido, se informará de este error.

 21
Author: Xiao Peng - ZenUML.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-05 00:38:20

A veces lo que podría estar causando el problema no tiene nada que ver con la clase principal, y tuve que averiguar esto de la manera difícil. Era una biblioteca referenciada que moví, y me dio el:

No se pudo encontrar o cargar la clase principal xxx Linux

Acabo de borrar esa referencia, la agregué de nuevo, y funcionó bien de nuevo.

 12
Author: Eduardo Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 16:49:21

Tuve tal error en este caso:

java -cp lib.jar com.mypackage.Main

Funciona con ; para Windows y : para Unix:

java -cp lib.jar; com.mypackage.Main
 12
Author: Yamahar1sp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-09 10:30:52

Use este comando:

java -cp . [PACKAGE.]CLASSNAME

Ejemplo: Si su nombre de clase es Hello.clase creada desde Hello.java a continuación, utilice el siguiente comando:

java -cp . Hello

Si su archivo Hola.java está dentro del paquete com.demo a continuación, utilice el siguiente comando

java -cp . com.demo.Hello

Con JDK 8 muchas veces sucede que el archivo de clase está presente en la misma carpeta, pero el comando java espera classpath y por esta razón añadimos -cp . tomar la carpeta actual como referencia para classpath.

 12
Author: shaILU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 23:55:46

Intenta -Xdiag.

La respuesta de Steve C cubre muy bien los posibles casos, pero a veces determinar si la clase no puede ser encontrada o cargada podría no ser tan fácil. Utilice java -Xdiag (desde JDK 7). Esto imprime un buen stacktrace que proporciona una pista de lo que significa el mensaje message Could not find or load main class.

Por ejemplo, puede apuntar a otras clases utilizadas por la clase principal que no se pudieron encontrar y que impidieron que la clase principal se cargara.

 10
Author: jan.supol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 23:18:14

En este caso tienes:

No se pudo encontrar o cargar la clase principal ?classpath

Es porque está utilizando "-classpath", pero el guion no es el mismo guion utilizado por java en el símbolo del sistema. Tuve este problema copiando y pegando desde Bloc de notas a cmd.

 8
Author: Nathan Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 16:55:34

En mi caso, apareció un error porque había proporcionado el nombre del archivo fuente en lugar del nombre de la clase.

Necesitamos proporcionar el nombre de la clase que contiene el método principal al intérprete.

 6
Author: KawaiKx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-12 00:37:57

Esto podría ayudarle si su caso es específicamente como el mío: como principiante también me encontré con este problema cuando traté de ejecutar un programa Java.

Lo compilé así:

javac HelloWorld.java

Y traté de ejecutar también con la misma extensión:

java Helloworld.java

Cuando eliminé el .java y reescribí el comando como java HelloWorld, el programa funcionó perfectamente. :)

 6
Author: Ramesh Pareek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 23:53:28

introduzca la descripción de la imagen aquí

Ubicación del archivo de clase: C:\test\com\company

Nombre del archivo: Main.clase

Nombre de clase completo: com.empresa.Main

Línea de comandos comando:

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

Tenga en cuenta que la ruta de la clase NO incluye \com\company

 5
Author: developer747,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-27 02:18:52

Si utiliza Maven para construir el archivo JAR, asegúrese de especificar la clase main en el pom.archivo 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
Author: Junchen Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 23:52:16

Pasé una cantidad decente de tiempo tratando de resolver este problema. Pensé que de alguna manera estaba configurando mi classpath incorrectamente, pero el problema fue que escribí:

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

En lugar de:

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

Pensé que el significado de totalmente calificado significaba incluir el nombre completo de la ruta en lugar del nombre completo del paquete.

 5
Author: mathewbruens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-07 08:14:26

Primero establezca la ruta usando este comando;

set path="paste the set path address"

Entonces necesitas cargar el programa. Escriba "cd (nombre de la carpeta)" en la unidad almacenada y compílela. Por ejemplo, si mi programa está almacenado en la unidad D, escriba "D:" presione enter y escriba " cd (nombre de la carpeta)".

 4
Author: arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-02 14:33:34

Lo que solucionó el problema en mi caso fue:

Haga clic derecho en el proyecto / clase que desea ejecutar, luego Run As->Run Configurations. Entonces debe corregir su configuración existente o agregar nuevo de la siguiente manera:

Abra la pestaña Classpath, haga clic en el botón Advanced... y luego agregue bin carpeta de su proyecto.

 4
Author: syntagma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-16 10:26:31

Este es un caso específico, pero como llegué a esta página buscando una solución y no la encontré, la agregaré aquí.

Windows (probado con 7) no acepta caracteres especiales (como á) en nombres de clases y paquetes. Linux, sin embargo.

Descubrí esto cuando construí un .jar en NetBeans y traté de ejecutarlo en la línea de comandos. Se ejecutó en NetBeans pero no en la línea de comandos.

 3
Author: GuiRitter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-27 00:26:16

Todas las respuestas aquí están dirigidas a los usuarios de Windows parece. Para Mac, el separador classpath es :, no ;. Como un error al establecer la ruta de clase usando ; no se lanza entonces esto puede ser difícil de descubrir si viene de Windows a Mac.

Aquí está el comando Mac correspondiente:

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

Donde en este ejemplo el paquete es com.test y una carpeta lib también se debe incluir en classpath.

 3
Author: blue-sky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 19:24:53

Al ejecutar java con la opción -cp como se anuncia en Windows PowerShell, puede obtener un error que se parece a:

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

Para que PowerShell acepte el comando, los argumentos de la opción -cp deben estar entre comillas como en:

java -cp 'someDependency.jar;.' ClassName

Formar el comando de esta manera debería permitir que Java procese correctamente los argumentos classpath.

 3
Author: Chezzwizz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-21 08:14:38

A veces, en algunos compiladores en línea que podría haber intentado obtendrá este error si no escribe public class [Classname] sino solo class [Classname].

 3
Author: lor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-18 18:29:30

Muy bien, muchas respuestas ya, pero nadie mencionó el caso donde el permiso de archivo puede ser el culpable. Cuando se ejecuta el usuario no tiene acceso al archivo jar o uno de los directorios de la ruta de acceso. Por ejemplo considere:

Archivo Jar en /dir1/dir2/dir3/myjar.jar

User1 quién posee el frasco puede hacer:

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

Pero todavía no funciona:

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

Esto se debe a que el usuario en ejecución (User2) no tiene acceso a dir1, dir2, javalibs o dir3. Puede volver loco a alguien cuando User1 puede ver los archivos, y puede acceder a ellos, pero el error todavía ocurre para User2

 3
Author: biocyberman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-26 12:33:35

En Windows ponga .; en el valor CLASSPATH al principio.

El. (dot) significa "buscar en el directorio actual". Esta es una solución permanente.

También puede configurarlo "una vez" con set CLASSPATH=%CLASSPATH%;.. Esto durará mientras su ventana cmd esté abierta.

 2
Author: Nenad Bulatovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 19:12:33

Realmente necesita hacer esto desde la carpeta src. Allí se escribe la siguiente línea de comandos:

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

Digamos que su clase se llama CommandLine.class, y el código se ve así:

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]);
            }
        }
    }

Entonces deberías cd ir a la carpeta src y el comando que necesitas ejecutar se vería así:

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

Y la salida en la línea de comandos sería:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
 2
Author: mdarmanin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 19:17:26

En mi caso, obtuve el error porque había mezclado nombres de paquetes en mayúsculas y minúsculas en un sistema Windows 7. El cambio de los nombres de los paquetes a todas las minúsculas resolvió el problema. Tenga en cuenta también que en este escenario, no tengo ningún error de compilación de la .archivo java en un .archivo de clase; simplemente no se ejecutaría desde el mismo directorio (sub-sub-sub -).

 2
Author: Howard007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-26 19:55:15

También me enfrenté a errores similares mientras probaba una conexión JDBC Java MongoDB. Creo que es bueno resumir mi solución final en breve para que en el futuro cualquiera pueda ver directamente los dos comandos y esté bien para continuar.

Supongamos que está en el directorio donde existen su archivo Java y dependencias externas (archivos JAR).

Compile:

javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
  • - cp - classpath argumento; pasar todos los archivos JAR dependientes uno por uno
  • *.java-Este es el archivo de clase Java que tiene el método principal. sdsd

Ejecutar:

java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
  • Por favor, observe los dos puntos (Unix) / coma (Windows) después de que todos los archivos JAR de dependencias terminen
  • Al final, observe el nombre de la clase principal sin ninguna extensión (no .clase or .java)
 2
Author: khichar.anil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 23:21:13

Tuve una extraña.

Error: No se pudo encontrar o cargar la clase principal mypackage.App

Resultó que tenía una configuración pom (padre) en el pom de mi proyecto.xml (el pom de mi proyecto.xml apuntaba a un pom padre.xml) y el relativePath estaba apagado / equivocado.

A continuación se muestra un parcial del pom de mi proyecto.xml

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

Una vez resuelto el relativePath pom, el error desapareció.

Vaya figura.

 2
Author: granadaCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 20:34:55

En Java, cuando a veces se ejecuta la JVM desde la línea de comandos utilizando el ejecutable java y está tratando de iniciar un programa desde un archivo de clase con public static void main (PSVM), es posible que se encuentre con el siguiente error a pesar de que el parámetro classpath de la JVM es preciso y el archivo de clase está presente en la classpath:

Error: main class not found or loaded

Esto sucede si el archivo de clase con PSVM no se pudo cargar. Una posible razón para ello es que la clase puede estar implementando una interfaz o extendiendo otra clase que no está en el classpath. Normalmente si una clase no está en el classpath, el error lanzado indica como tal. Pero, si la clase en uso se extiende o implementa, java no puede cargar la clase en sí.

Referencia: https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/

 1
Author: Anandaraja Ravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-18 03:01:01