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.
java
compilation
Skizz
fuente
fuente
Respuestas:
Necesita establecer la ruta de clase para encontrar su clase compilada:
java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2
fuente
Para ejecutar el archivo de clase Java desde la línea de comandos, la sintaxis es:
donde packageName (generalmente comienza con
com
oorg
) 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 lacom/foo/app
carpeta (carpeta separada para cada punto), por lo que ejecuta su aplicación como:Nota:
$
indica el indicador de shell, ignórelo al escribirSi la clase no tiene ningún
package
nombre 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
/-classpath
o usando laCLASSPATH
variable que apunta a la carpeta con sus archivos jar / war / ear / zip / class . Entonces, en Linux, puede prefijar el comando con:,CLASSPATH=/path/to/jars
en 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 compile
en nuestromy-app/
directorio, generará nuestro archivo de clase entarget/classes/com/foo/app/App.class
.Para ejecutarlo, podemos especificar la ruta de clase a través
-cp
o 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:
javap
no funcionará si el archivo compilado se ha ofuscado.fuente
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.
fuente
C:/blah/blah/foldercontainJava
javac javafile.java
fuente
¡Tienes que poner java en minúsculas y tienes que agregar .class!
fuente