You are on page 1of 19

Compilar java desde línea de comandos

Contenido
[ocultar]

    

1 Preparando el path 2 Compilar 3 Ejecutar sin crear el .jar 4 Creamos un jar 5 Fichero de manifiesto

Preparando el path
Supongamos que en el directorio C:\Archivos de programa\Java\jdk1.5.0_06 tenemos recien instalado java. Por supuesto, los numerítos del final pueden cambiar si tenemos otra versión o incluso el directorio si hemos decidido instalarlo en otro sitio. Al instalar java en Windows, además, la instalación coloca el fichero java.exe en un path que es accesible desde cualquier lado, en C:\Windows\System32\java.exe Con esto, podemos desde una ventana de ms-dos ejecutar el comando "java", que nos permite ejecutar programas java ya hechos. Sin embargo, todavía no podemos ejecutar el comando "javac" que nos permite compilar programas java, ni el comando "jar" que nos permite crear ficheros .jar de java, ya que los ejecutables javac.exe y jar.exe no se colocan automáticamente en el directorio C:\Windows\System32, como el java.exe. Estos ficheros javac.exe y jar.exe se encuentran en el directorio bin de instalación de java, es decir C:\Archivos de programa\Java\jdk1.5.0_06\bin Para hacer que estos ejecutables estén accesibles, debemos poner en el path de búsqueda de ejecutables el directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin, que es el directorio donde se encuentran los porgramas javac.exe y jar.exe. Para poner este directorio en el path de búsqueda de ejecutables hacemos lo siguiente En Windows 2000 o XP, vamos al icono "mi pc", le damos con el botón derecho de ratón para sacar el menú, elegimos "propiedades", pestaña "opciones avanzadas" y luego el botón "variables de entorno". Buscamos la variable "Path" y la editamos. Al final de lo que tenga en ese momento, añadimos un punto y coma y el directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin

deben colocarse en el directorio de nuestro proyecto.. vamos al icono "equipo". "variables de entorno" y seguimos como en Windows 2000/XP. En mi caso.C:\Program Files\Java\jdk1. Ahí creamos y hacemos nuestros fuentes .java package paquete.0_01\bin Una vez hecho esto y aceptados todos los cambios..java lleva dentro package paquete. }  Si un fichero . debemos crear en nuestro proyecto un subdirectorio paquete y meter dentro el fichero . "configuración avanzada del sistema". }  Si un fichero .java. En esa ventana de ms-dos ya deberíamos poder ejecutar los comandos javac y jar... sacamos el menú. abrimos una ventana de ms-dos nueva.subpaquete. public class fuente3 { . El siguiente fuente debería ir en c:\path_mi_proyecto\fuente1.java.. El siguiente fuente debería ir en c:\path_mi_proyecto\paquete\subpaquete\fuente3.java que dentro no ponen package. El siguiente fuente debería ir en c:\path_mi_proyecto\paquete\fuente2.6. public class fuente2 { .java package paquete. debemos crear en nuestro proyecto un subdirectorio paquete y dentro de este otro subderictorio subpaquete y dentro de este nuestro fuente .C:\Windows.java.subpaquete. Compilar Vamos al directorio donde está nuestro proyecto (o el directorio donde hemos decidido que van a ir nuestros fuentes java)..En Windows Vista.java lleva dentro package paquete. elegimos "propiedades". Es importante tener en cuenta lo siguiente:  Los ficheros .java public class fuente1 { . Es importante abrirla después de haber hecho los cambios. quedaría algo como esto C:\Windows\system32. después de añadir.

en el directorio de nuestro proyecto jar cf fichero. Esto generará los ficheros fuente1. El fichero ..class .fuente3 Hay que fijarse en varias cosas importantes. debemos compilar desde el directorio de nuestro proyecto y debemos poner.rar de winrar. como siempre..class y paquete\subpaquete\fuente3.class paquete\subpaquete\fuente3.. debemos ejecutar el siguiente comando.class ya compilados.subpaquete. paquete\fuente2. debemos ejecutar java fuente1 java paquete. es importante fijarse que no hemos añadido .java paquete\subpaquete\fuente3. La primera es que estamos en el directorio de nuestro proyecto.class detrás.jar fuente1. } Es decir.java es decir.jar con todas nuestras clases.class. según cual sea la clase que contiene el main.class Ejecutar sin crear el . Nuevamente debemos estar situados en el directorio de nuestro proyecto y. similar a un fichero .zip de winzip o . los path para llegar desde ahí a los fuentes.fuente2 java paquete. ya podemos ejecutar. los package y los directorios deben coincidir. donde se guardan empaquetados otros ficheros.jar Una vez que tenemos los . situados. y no con las barras \. Para generar el jar. subpaquete y el nombre de las clases con puntos. Para compilar. Finalmente.class paquete\fuente2. situados en el directorio de nuestro proyecto. Creamos un jar Podemos crear un fichero . debemos compilar así javac fuente1.java paquete\fuente2. También es importante ver que hemos separado paquete. si hace falta.jar no es más que un fichero dentro del cual se guardarán juntos todos los ficheros .class generados. no en los subdirectorios paquete ni subpaquete.

Para ello. de nombre por ejemplo manifiesto. escribimos .class y el directorio paquete completo.fuente3 Hay que advertir que estamos en el directorio de nuestro proyecto.Esto generará un fichero. en un fichero de texto normal. subpaquetes y clases con punto y no con barras \. el contenido podría ser Main-Class: paquete. con todo su contenido.jar fuente1. y creado en el directorio de nuestro proyecto. con java -cp fichero. según qué fuente sea el que tenga el main.fuente3 Nuevamente.jar paquete. además que no hemos puesto .txt.jar fuente1 java -cp fichero. También que hemos separado paquetes. Un jar generado de esta forma se puede ejecutar.java y paquete\subpaquete\fuente3. Ahora.fuente2 java -cp fichero.jar paquete.jar el fuente1.jar que tendrá dentro los tres ficheros .class. ponemos una línea como esta Main-Class: fuente1 o bien. para generar el jar.class detrás. los ficheros paquete\fuente2.subpaquete. Fichero de manifiesto Es posible meter un fichero dentro del jar que indique cual es la clase que tiene el main.fuente2 o bien Main-Class: paquete. pero no molestarán. advertir que hemos puesto todo separado con puntos y sin .java también se meterán dentro. si el main está en alguna de las otras clases.class paquete Esto mete dentro de fichero. Es importante fijarse que hemos ejecutado el comando desde nuestro directorio de proyecto y que hemos puesto los paths. Se puede hacer más rápido ejecutando este comando jar cf fichero.class detrás. de forma que al ejecutar no tengamos que decirle cual es. Tal cual lo tenemos.jar.subpaquete. que es donde está el fichero.

.class paquete\subpaquete\fuente3.1 o 1. 2011 Aquellos que como yo vienen de la vieja escuela Java (por ejemplo java 1.jar. hay que colocar primero el fichero de manifiesto y luego el fichero. habría que invertir el nombre del fichero de manifieesto y del jar jar cfm fichero.BufferedReader. import java. entrada por linea de comandos con Java Posted on February 23.io.InputStreamReader. Si las opciones fueran al revés. import java.class Una vez generado el jar con su fichero de manifiesto dentro.class paquete\fuente2.IOException. he aqui un ejemplo ? 1 2 3 import java. podemos ejecutarlo así java -jar fichero. cfm.txt fichero.io.class Es importante fijarse que si las opciones son cmf.jar La opción -jar hará que java mire el contenido del fichero de manifiesto para buscar el nombre de la clase con el main.class paquete\fuente2.2) recordarán que era algo engorroso la cantidad de lineas de código a escribir para ingresar datos por linea de comandos con Java(hay que comprender que desde un principio Java no estuvo pensado para esto).class paquete\subpaquete\fuente3.io.txt fuente1.jar fuente1.jar cmf manifiesto.jar manifiesto.

in). String dato. dato). } } } Desde la versión 1. try { dato = br. } catch (IOException e) { e.out. String dato = console. System. System. if (console == null) { System. System. al igual que otros lenguajes como podrían ser C/C++.console().println("Introducir un numero: "). una clase que nos hace un poco mas intuitivo el manejo (entrada y salida) de datos por linea de comandos.readLine().io.").readLine(). Les muestro ahora la clase anterior haciendo uso de la clase Console ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.printf("Introducir un numero: ").println("No hay consola. console. BufferedReader br = new BufferedReader(isr).4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class EntradaDatosViejaForma { public static void main(String[] args){ InputStreamReader isr = new InputStreamReader(System.printStackTrace().println("El numero introducido fue: "+dato). public class EntradaDatosNuevaForma { public static void main(String[] args) { Console console = System.6 de java existe la clase java.exit(1). } } . } console.printf("El numero introducido fue: %s \n".io.Console.err.Console.out.

y tipos de datos referencia. Por ejemplo. caracteres. Java es un lenguaje orientado a objetos. que utilizaremos posteriormente al crear ejemplares a partir de esta plantilla. Cada uno de estos contactos representa a una Persona. estas estructuras nos sirven para crear plantillas de elementos del mundo real. así que necesita gestionar una serie de contactos. char. De este modo podemos llegar a la conclusión que nuestra plantilla . Definición de una clase Imagine que quiere crear una aplicación de agenda telefónica. así que exceptuando los tipos de datos básicos para el manejo de números enteros.19 20 Introduccion a las clases en JAVA Etiquetas: Guia JAVA Introducción Las clases son una parte muy importante de los lenguaje de programación orientado a objetos (POO). float). todo en java es un objeto. el elemento del mundo real "Persona" podría ser una clase para una aplicación que gestione clientes. etcétera. De esta manera en java existen dos grandes tipos de datos: tipos de datos primitivos (int.

Los valores definidos en la clase se denominan sus atributos. esta necesita definir una serie de atributos que tendrán en común todos los objetos que creemos a partir de esta clase. //Definicion de metodos . métodos. determinando estos el estado actual del objeto. este contendrá una serie de valores que lo identifican. String apellidos. apellidos y el número de teléfono. Así que cuando creemos un ejemplar (objeto) de esta clase. Esto se realiza de la siguiente manera: ? 1 2 3 4 5 } class Persona { String nombre. La creación de una clase en java se realiza de la siguiente manera: ? 1 2 3 4 } class Persona { //Declaracion de atributos //Definicion de metodos Atributos de una clase Ahora que ya tenemos nuestra clase Persona. por ejemplo el nombre será un tipo cadena de caracteres (String) y el teléfono será un número entero (int). Persona sería nuestra clase. los apellidos y el teléfono. y el conjunto de operaciones que define una clase.para gestionar estos contactos puede ser Persona. la cual contendrá una serie de valores que tienen en común todas las personas como el nombre. como por ejemplo el nombre. int telefono. Para definir los atributos se deben especificar sus tipos.

podemos acceder al nombre mediante su atributo. int telefono. una lista de argumentos que podrán ser utilizados en su interior (en este . así que cuando necesitemos obtener o modificar el valor de algún atributo. Si el nombre tiene espacios se pondrá de la siguiente manera: numeroTeléfono. } void setNombre(String nuevoNombre) { nombre = nuevoNombre. y el nombre de los atributos y métodos por minúscula. un método se define con el valor devuelto (String). Por ejemplo. siempre los nombres de las clases deben empezar por una letra mayúscula. Métodos de una clase Una vez que hemos instanciado la clase Persona. el nombre (getNombre). pero es algo desaconsejado. la manera de poder realizar acciones con este objeto es mediante los métodos que define la clase. si queremos recuperar el nombre de nuestro objeto de tipo Persona. utilizaremos métodos de la siguiente manera: ? 1 class Persona { 2 3 4 5 6 7 8 9 10 11 String nombre.6 Como vemos. y hemos creado un objeto. String apellidos. String getNombre(){ return nombre. } 12 } 13 Como vemos.

su constructor seria algo como esto: ? 1 2 Persona(String nombre. tan solo necesitamos crear ejemplares de esta clase para empezar a utilizarla. y los métodos que modifican estos valores empiezan por set. La regla es que los métodos que devuelven valores de atributos empiezan por get. ambos seguidos del nombre del atributo que devuelven. y entre llaves. declarar sus atributos y definir algunos métodos para ver y modificar dichos atributos. También podemos hacer métodos que no devuelvan ningún valor. Para poder crear objetos de tipo Persona. por ejemplo. Además si nuestro método devuelve algún valor. Normalmente se utiliza también para configurar los valores de los atributos inicialmente. en el método se deberá utilizar la palabra reservada return. pero en cambio si recibe dos parámetros. se hace uso de un método especial denominado constructor de la clase. String apellidos. este método se sitúa dentro de la misma clase.nombre = nombre. se coloca el código que ejecutará nuestro método al ser llamado. . utilizando la palabra reservada voidde la siguiente manera: ? 1 2 3 } void nombreMetodo(int argumento1. siguiendo con nuestra clase Persona. y sirva para que podamos crear ejemplares de la clasePersona. que se utilizarán como una variable normal dentro de este método. así que no necesita usar la palabra return. int telefono) { this.caso ninguno). Constructores Ahora ya podemos crear una clase. Dichos argumentos se pasarán al hacer la llamada al método . String argumento2) { //Codigo del metodo Como podemos observar este método no devuelve ningún valor.

de cualquier forma. Si el compilador no encuentra constructor en una clase. A parte del constructor normal. delante del nombre de los atributos de la clase.apellidos = apellidos. this. Y hasta aquí. Las peculiaridades de este método son:     No tiene valor devuelto. todas nuestras clases deben tener un denominado constructor por defecto. ya podríamos hacer una clase Persona totalmente acabada: ? 1 2 3 4 5 6 7 8 9 class Persona { //Atributos String nombre. int telefono) { this. que no es más que un constructor sin parámetros y sin código en su interior. int telefono. //Constructor Persona() {} //Constructor por defecto Persona(String nombre. este lo creará automáticamente.apellidos = apellidos. .telefono = telefono. es aconsejable que nosotros lo creemos. String apellidos.3 4 5 } this. se utiliza this. Para diferenciar el nombre de los atributos del nombre de los parámetros. String apellidos.nombre = nombre. this. Suele recibir los valores iniciales utilizados para configurar los atributos del objeto. El nombre del método es el mismo que el de la clase.

apellidos = apellidos. int getTelefono() { return this.10 11 12 13 14 } } this. } String getApellidos() { return this. el nombre del archivo que contendrá la clase se deberá llamar Persona.telefono = telefono.telefono. .telefono = telefono.nombre = nombre.java.apellidos. } 23 void setTelefono(int telefono) { 24 25 26 27 28 29 30 31 32 } } } this. } void setApellidos(String apellidos) { this. //Metodos get y set void setNombre(String nombre) { this. 15 16 17 18 19 20 21 22 String getNombre() { return this.nombre. Como ya sabemos.

) accedemos a metodos y atributos del objeto String nombre = contacto. //Mostramos en pantalla el contenido de nombre System. ya podemos crear instancias de nuestra clase Persona utilizando el operador new seguido de la llamada al constructor pasándole a este los parámetros necesarios. Esto devolverá la referencia a un objeto que deberemos almacenar para su posterior uso.out. Y ahora ya podemos comprobar que nuestro programita funciona correctamente haciendo llamadas a los métodos de la clase Persona y mostrando lo que devuelvan en pantalla de la siguiente manera.setNombre("Antonio"). lo guardamos en una variable de tipo referencia Personallamada contacto. De esta manera lo que devuelve el operador new. nombre = contacto. .getNombre(). así que el proceso de instanciar la clase Persona se hará de la siguiente manera: ? 1 2 3 4 5 } } class Main { public static void main(String[] args) { Persona contacto = new Persona("Alejandro". "Santiago Nieto". contacto.Ahora. System.println(nombre).println(nombre).out. 555555555).getNombre(). todo esto irá justo después de la línea anterior: ? 1 2 3 4 5 6 7 //Mediante el (.

println ("El mayor es: " + n2).out. aquí te dejo una posible solución espero te sirva. import java. hay muchas maneras de hacerlo.println ("El menor es: " + n2).out.out.println ("El menor es: " + n1).out. /** * @author Knight */ public class Calc08 { // Funcion que calcula el mayor y menor public void Calcula(int n1. int n2. if (n1 > n3) { System.util.println ("El mayor es: " + n1). if (n2 > n3) { System. } } if ((n2 > n1) && (n2 > n3)) { System.out. } else { System. } else { System. } } .Hola Alejandra.Scanner. int n3) { if ((n1 > n2) && (n1 > n3)) { System.println ("El menor es: " + n3).out.println ("El menor es: " + n3).

// Aqui se llama la funcion } } . Calc08 c = new Calc08(). c.print ("Ingresa tercer numero: ").out. num2 = sc. num3 = sc. num2.Calcula(num1.if ((n3 > n1) && (n3 > n2)) { System.println ("El menor es: " + n2). if (n1 > n2) { System. System.println ("El menor es: " + n1).out. num3. Scanner sc = new Scanner(System.out.out. System.print ("Ingresa segundo numero: ").out.in).print ("Ingresa primer numero: "). } else { System. num2. num1 = sc.println ("El mayor es: " + n3).nextInt(). num3). } } } public static void main(String[] args) { int num1.out.nextInt().nextInt(). System.

La función imprime en pantalla el resultado.) __________ Hola de nuevo Alejandra. puedes pedir los números en la clase principal y poner el método que determina cual es el mayor y el menor en otra clase que va pertenecer al mismo package. a éste le puedes agregar varias clases. finalmente en la clase principal tienes que hacer que herede de la clase que acabas de crear. saludos! ./* En el programa principal se piden los 3 números al usuario y después de ingresarlos se manda llamar la función que calculará el meor y mayor pasandole como parámetros los números anteriormente ingresados. crear en el mismo proyecto en NetBeans otra clase con el nombre que gustes (donde dice "Source Packages" click derecho > "New" > "Java Class. se emplea para agrupar las diferentes clases que usas en tu programa. solo hay que cortar el método "Calcula".. cuando creas un proyecto en NetBeans automaticamente crea el "package" generalmente lo llama como tu clase principal. donde ésta el método. yo la llame "Calcular" y la principal que hereda de "Calcular": . ésto se hace con el "extends" mas el nombre de la clase que creaste. */ Si tienes alguna duda agrega detalles. Entonces tendrás 2 clases. para llamar la función debemos crear un objeto del tipo de la clase e invocarla. el "package" en Java solo es un contenedor de clases. Si necesitas usar el package. en el código anterior éste objeto es "c". es decir.") y pegar en ella el método cortado anteriormente. El código queda tal cual como esta arriba..

util. import java. public class Calcular { //Aquí el método "Calcular" } //►Clase principal "main" package calc08. public class Calc08 extends Calcular{ public static void main(String[] args) { //Aquí el código del main } } //Saludos! ----------------------------------------------------------------------------------------- .//►Clase método calcular package calc08.Scanner.

Para esto nos apoyamos en la clase Scanner. El método . Saber qué numero es mayor. Para ello vamos a utilizar la estructura de selección if.in). iNumero2.nextInt() nos devolverá lo que el usuario haya introducido en un valor entero. La idea es muy sencilla: si numero1 es mayor que numero 2 entonces numero1 es el mayor si no numero2 es el mayor Que en nuestro código Java quedaría de la siguiente forma con la estructura if: if (iNumero1>iNumero2) System. . int iNumero1. La idea es muy simple. System.nextInt().println(iNumero1 + " es mayor que " + iNumero2).El saber cuál es el mayor de dos números es uno de los primeros ejemplos que hacemos cuándo empezamos a aprender un lenguaje de programación. Scanner reader = new Scanner(System. iNumero1 = reader.out.out. Pedimos al usuario dos números y nuestro código tiene que determinar cuál de los dos números es más grande.println("Dame el primer número"). Si quieres más detalle sobre cómo obtener lo que el usuario ha introducido puedes leerte "Lectura de datos en Java con Scanner" Ahora vamos con el centro del problema. Lo primero será pedir los números al usuario.

else System.out.println(iNumero2 + " es mayor que " + iNumero1). . Ya tenemos nuestro código Java para saber cuál es el mayor de dos números.