java - tools - no se ha encontrado o cargado la clase principal weblogic




Error: No se pudo encontrar o cargar la clase principal (15)

Esta pregunta ya tiene una respuesta aquí:

Tengo problemas para compilar y ejecutar mi código Java, con la intención de permitirme interconectar Java con un objeto compartido para Vensim, un paquete de modelado de simulación.

El siguiente código compila sin error:

javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java     VensimHelper.java VensimException.java VensimContextRepository.java

Sin embargo, cuando intento ejecutar lo siguiente:

java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars

Recibo el siguiente error: "Error: No se pudo encontrar o cargar la clase principal SpatialModel". Mi código SpatialModel.java contiene un método 'principal' (a continuación), así que no estoy seguro de cuál es el problema. ¿Alguien puede ayudarme? Gracias.

import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;

public class SpatialModel {

    private VensimHelper vh;

    public static final String DLL_LIBNAME_PARAM = "vensim_lib_nam";

    public static final String MODEL_PATH_PARAM = "vensim_model_path";

    private final static int VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT = 10;

    public SpatialModel() throws SpatialException {

        String libName = System.getProperty(DLL_LIBNAME_PARAM);
        String modelPath = System.getProperty(MODEL_PATH_PARAM);        

        if(libName == null || libName.trim().equals("")) {
            log.error("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
            throw new SpatialException("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
        }

        if(modelPath == null || modelPath.trim().equals("")) {
            log.error("Model path has to set with -D" + MODEL_PATH_PARAM);
            throw new SpatialException("Model path ahs to be set with -D" + MODEL_PATH_PARAM);
        }

        for (int i = 0; i < VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT && vh == null; i++) {
            try {
                log.info("creating new vensim helper\n\tdll lib: " + libName + "\n\tmodel path: " + modelPath);
                vh = new VensimHelper(libName, modelPath);
            } catch (Throwable e) {
                log.error("An exception was thrown when initializing Vensim, try: " + i, e);
            }
        }
        if (vh == null) {
            throw new SpatialException("Can't initialize Vensim");
        }

    }

    public static void main(String[] args) throws VensimException {

        long before = System.currentTimeMillis();   
        String libName = System.getProperty(DLL_LIBNAME_PARAM);
        String modelPath = System.getProperty(MODEL_PATH_PARAM);

        if (libName == null) {
            libName = "libvensim";
        }
        if(modelPath == null) {
            modelPath = "~/BassModel.vmf";
        }

        System.setProperty(DLL_LIBNAME_PARAM, libName);
        System.setProperty(MODEL_PATH_PARAM, modelPath);

        if (args.length > 0 && args[0].equals("info")) {
            System.out.println(new VensimHelper(libName, modelPath).getVensimInfo());
        } else if (args.length > 0 && args[0].equals("vars")) {
            VensimHelper helper = new VensimHelper(libName, modelPath);
            String[] vars = helper.getVariables();
            for (String var : vars) {
                System.out.println(helper.getVariableInfo(var));
            }
        } else {

            File f = new File(".");
            System.out.println(f.getAbsolutePath());

            SpatialModel sm = new SpatialModel();
        }

        System.out.println("Execution time: " + (System.currentTimeMillis() - before));
    }

}

Creo que necesitas agregar el directorio actual a la ruta de clase de Java

java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars

Debe asegurarse de agregar la ubicación de su archivo .class a su classpath. Por lo tanto, si está en la carpeta actual, a continuación, agregue . a su classpath. Tenga en cuenta que el separador de classpath de Windows es un punto y coma, es decir ;


Estaba usando Java 1.8, y este error ocurrió repentinamente cuando presioné "Construir y limpiar" en netbeans, cambié por un breve momento a 1.7 otra vez, hice clic en Aceptar, volví a abrir las propiedades y volví a la 1.8 y todo funcionó perfectamente.

Espero poder ayudar a alguien con esto, estos errores pueden llevar bastante tiempo.


Este problema se produjo cuando importé un proyecto existente en eclipse. Lo que sucede es que copió todos los archivos, no en el paquete, sino fuera del paquete. Por lo tanto, cuando intenté ejecutar> ejecutar configuraciones, no pudo encontrar el método principal porque no estaba en el paquete. Todo lo que hice fue copiar los archivos en el paquete y Eclipse pudo detectar el método principal. Finalmente, asegúrese de que Eclipse pueda encontrar su método principal, asegurándose de que sus archivos java estén en el paquete correcto.


Proyecto> Limpiar y luego asegurarse de que BuildPath> Bibliotecas tenga la biblioteca correcta.


Puede probar estos dos cuando recibe el error: 'no se pudo encontrar o cargar la clase principal'

Si su archivo de clase se guarda en el siguiente directorio con el nombre del programa HelloWorld d:\sample

  1. java -cp d:\sample HelloWorld
  2. java -cp . HelloWorld


Si es tan simple como mucha gente piensa, me incluyo :)

cd a Project Folder/src/package allí debería ver yourClass.java, luego ejecute javac yourClass.java que creará suClass.class, luego cd fuera de la carpeta src y en la carpeta de build allí puede ejecutar java package.youClass

Estoy usando la Terminal en Mac o puede realizar la misma tarea usando el Símbolo del sistema en Windows


Si está trabajando en Eclipse, simplemente realice la limpieza ( project\clean.. clean all projects ) del proyecto.


Si está utilizando Eclipse ... Cambié el nombre de mi archivo de clase principal y obtuve ese error. Fui al configurador "Ejecutar como" y, bajo la ruta de clase para ese proyecto, había enumerado ambos archivos en la ruta de clase. Eliminé la clase antigua a la que cambié de nombre y dejé la clase que tenía el nuevo nombre y compiló y funcionó bien.


Si la clase está en un paquete

package thepackagename;

public class TheClassName {
  public static final void main(String[] cmd_lineParams)  {
     System.out.println("Hello World!");
  } 
}

Entonces llamando:

java -classpath . TheClassName

da como resultado Error: Could not find or load main class TheClassName . Esto se debe a que debe llamarse con su nombre completo:

java -classpath . thepackagename.TheClassName

Y este directorio thepackagename debe existir en el classpath. En este ejemplo . , es decir, el directorio actual, es la totalidad de classpath. Por lo tanto, este ejemplo particular debe llamarse desde el directorio en el que existe el nombre de thepackagename .

Para que quede claro, el nombre de esta clase no es TheClassName , es thepackagename.TheClassName . Intentar ejecutar TheClassName no funciona, porque no existe ninguna clase con ese nombre . No en el classpath actual de todos modos.

Finalmente, tenga en cuenta que la versión compilada ( .class) se ejecuta, no la versión del código fuente ( .java). Por lo tanto, "CLASSPATH".


Tengo un problema similar en Windows, está relacionado con el classpath. Desde la línea de comandos, navegue hasta el directorio donde está ubicado su archivo Java (* .java y * .class), luego intente nuevamente con sus comandos.


Tienes que incluir classpath a tus comandos javac y java

javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main

Supongamos que tienes lo siguiente

Paquete denominado: com.test Nombre de la clase: el archivo Hello (que tiene main) se encuentra dentro de "src / com / test / Hello.java"

desde el directorio externo:

$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
  • En Windows lo mismo estará funcionando también, ya lo intenté.

Yo uso Anypoint Studio (un IDE basado en Eclipse). En mi caso, todo funcionó bien, hasta que descubrí que mientras ejecutaba el código Java, se ejecutaba algo totalmente diferente. Luego he borrado los archivos .class. Después de este punto recibí el mensaje de error del título de esta pregunta. Limpiar el proyecto no solucionó el problema.

Después de reiniciar el IDE todo volvió a funcionar bien.


java -verbose:class HelloWorld puede ayudarlo a comprender qué clases se están cargando.

Además, como se mencionó anteriormente, recuerde llamar al nombre completo calificado (es decir, incluir el paquete).





linux