¿Cómo ejecuto archivos .class de Java?

81

He compilado un programa HelloWorld y estoy usando el símbolo del sistema para ejecutarlo. El archivo .class se llama HelloWorld2.class

El archivo se encuentra en C: \ Users \ Matt \ workspace \ HelloWorld2 \ bin Esto es lo que obtengo cuando voy al símbolo del sistema y escribo "Java HelloWorld2":

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2.  Program will exit.

Esperaba ver un HelloWorld impreso. ¿Qué estoy haciendo mal? Tengo el JDK instalado.

Skizz
fuente
9
Además de la respuesta de Isaac a tu problema. Puede ser una buena idea escribir "java" en minúsculas porque las mayúsculas solo funcionan en MS Windows.
Hendrik Brummermann

Respuestas:

95

Necesita establecer la ruta de clase para encontrar su clase compilada:

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2

Isaac Truett
fuente
Funciona perfectamente desde cualquier lugar de mi estructura de archivos. Simplemente coloque la ruta a la clase compilada en un parámetro -cp y luego el nombre de la clase compilada sin ninguna ruta. También puede ejecutar esta clase sin el parámetro -cp si está en la misma carpeta que su clase compilada.
Václav
42

Para ejecutar el archivo de clase Java desde la línea de comandos, la sintaxis es:

java -classpath /path/to/jars <packageName>.<MainClassName>

donde packageName (generalmente comienza con como org) es el nombre de la carpeta donde está presente su archivo de clase.

Por ejemplo, si el nombre de su clase principal es Aplicación y el nombre del paquete Java de su aplicación es com.foo.app, entonces su archivo de clase debe estar en la com/foo/appcarpeta (carpeta separada para cada punto), por lo que ejecuta su aplicación como:

$ java com.foo.app.App

Nota: $ indica el indicador de shell, ignórelo al escribir

Si la clase no tiene ningún packagenombre definido, sólo tiene que ejecutar como: java App.

Si tiene otras dependencias de jar, asegúrese de especificar su parámetro classpath con -cp/ -classpatho usando la CLASSPATHvariable que apunta a la carpeta con sus archivos jar / war / ear / zip / class . Entonces, en Linux, puede prefijar el comando con:, CLASSPATH=/path/to/jarsen Windows, debe agregar la carpeta a la variable del sistema. Si no se establece, la ruta de la clase de usuario consta del directorio actual ( .).


Ejemplo practico

Dado que hemos creado un proyecto de muestra usando Maven como:

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

y hemos compilado nuestro proyecto mvn compileen nuestro my-app/directorio, generará nuestro archivo de clase en target/classes/com/foo/app/App.class.

Para ejecutarlo, podemos especificar la ruta de clase a través -cpo ir directamente a ella, verifique los ejemplos a continuación:

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

Para verificar su clase y el nombre del paquete, puede usar la herramienta de desensamblaje de archivos de clase Java, por ejemplo:

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

Nota: javapno funcionará si el archivo compilado se ha ofuscado.

Kenorb
fuente
2

Esto puede significar muchas cosas, pero la más común es que la clase contenida en el archivo no tiene el mismo nombre que el archivo en sí. Por lo tanto, verifique si su clase también se llama HelloWorld2.

Federico Vera
fuente
0
  1. Vaya a la ruta donde guardó el archivo java que desea compilar.
  2. Reemplazar ruta escribiendo cmd y presione enter.
  3. Aparecerá el directorio del símbolo del sistema que contiene el archivo de ruta como C:/blah/blah/foldercontainJava
  4. Entrar javac javafile.java
  5. Presione Entrar. Generará automáticamente un archivo de clase java
odunstory
fuente
-3

¡Tienes que poner java en minúsculas y tienes que agregar .class!

java HelloWorld2.class
Corni
fuente