Você está na página 1de 19

Compilar java desde lnea 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 numertos del final pueden cambiar si tenemos otra versin o incluso el directorio si hemos decidido instalarlo en otro sitio. Al instalar java en Windows, adems, la instalacin 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, todava 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 automticamente en el directorio C:\Windows\System32, como el java.exe. Estos ficheros javac.exe y jar.exe se encuentran en el directorio bin de instalacin de java, es decir C:\Archivos de programa\Java\jdk1.5.0_06\bin Para hacer que estos ejecutables estn accesibles, debemos poner en el path de bsqueda 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 bsqueda de ejecutables hacemos lo siguiente En Windows 2000 o XP, vamos al icono "mi pc", le damos con el botn derecho de ratn para sacar el men, elegimos "propiedades", pestaa "opciones avanzadas" y luego el botn "variables de entorno". Buscamos la variable "Path" y la editamos. Al final de lo que tenga en ese momento, aadimos un punto y coma y el directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin

En Windows Vista, vamos al icono "equipo", sacamos el men, elegimos "propiedades", "configuracin avanzada del sistema", "variables de entorno" y seguimos como en Windows 2000/XP. En mi caso, despus de aadir, quedara algo como esto C:\Windows\system32;C:\Windows;C:\Program Files\Java\jdk1.6.0_01\bin Una vez hecho esto y aceptados todos los cambios, abrimos una ventana de ms-dos nueva. Es importante abrirla despus de haber hecho los cambios. En esa ventana de ms-dos ya deberamos poder ejecutar los comandos javac y jar.

Compilar
Vamos al directorio donde est nuestro proyecto (o el directorio donde hemos decidido que van a ir nuestros fuentes java). Ah creamos y hacemos nuestros fuentes .java. Es importante tener en cuenta lo siguiente: Los ficheros .java que dentro no ponen package, deben colocarse en el directorio de nuestro proyecto. El siguiente fuente debera ir en c:\path_mi_proyecto\fuente1.java public class fuente1 { ... }

Si un fichero .java lleva dentro package paquete;, debemos crear en nuestro proyecto un subdirectorio paquete y meter dentro el fichero .java. El siguiente fuente debera ir en c:\path_mi_proyecto\paquete\fuente2.java

package paquete; public class fuente2 { ... }

Si un fichero .java lleva dentro package paquete.subpaquete;, debemos crear en nuestro proyecto un subdirectorio paquete y dentro de este otro subderictorio subpaquete y dentro de este nuestro fuente .java. El siguiente fuente debera ir en c:\path_mi_proyecto\paquete\subpaquete\fuente3.java

package paquete.subpaquete; public class fuente3 {

... }

Es decir, los package y los directorios deben coincidir. Para compilar, situados en el directorio de nuestro proyecto, debemos compilar as javac fuente1.java paquete\fuente2.java paquete\subpaquete\fuente3.java

es decir, debemos compilar desde el directorio de nuestro proyecto y debemos poner, si hace falta, los path para llegar desde ah a los fuentes. Esto generar los ficheros fuente1.class, paquete\fuente2.class y paquete\subpaquete\fuente3.class

Ejecutar sin crear el .jar


Una vez que tenemos los .class generados, ya podemos ejecutar. Nuevamente debemos estar situados en el directorio de nuestro proyecto y, segn cual sea la clase que contiene el main, debemos ejecutar java fuente1 java paquete.fuente2 java paquete.subpaquete.fuente3

Hay que fijarse en varias cosas importantes. La primera es que estamos en el directorio de nuestro proyecto, no en los subdirectorios paquete ni subpaquete. Tambin es importante ver que hemos separado paquete, subpaquete y el nombre de las clases con puntos, y no con las barras \. Finalmente, es importante fijarse que no hemos aadido .class detrs.

Creamos un jar
Podemos crear un fichero .jar con todas nuestras clases. El fichero .jar no es ms que un fichero dentro del cual se guardarn juntos todos los ficheros .class ya compilados, similar a un fichero .zip de winzip o .rar de winrar, donde se guardan empaquetados otros ficheros. Para generar el jar, debemos ejecutar el siguiente comando, situados, como siempre, en el directorio de nuestro proyecto jar cf fichero.jar fuente1.class paquete\fuente2.class paquete\subpaquete\fuente3.class

Esto generar un fichero.jar que tendr dentro los tres ficheros .class. Es importante fijarse que hemos ejecutado el comando desde nuestro directorio de proyecto y que hemos puesto los paths. Se puede hacer ms rpido ejecutando este comando jar cf fichero.jar fuente1.class paquete

Esto mete dentro de fichero.jar el fuente1.class y el directorio paquete completo, con todo su contenido. Tal cual lo tenemos, los ficheros paquete\fuente2.java y paquete\subpaquete\fuente3.java tambin se metern dentro, pero no molestarn. Un jar generado de esta forma se puede ejecutar, segn qu fuente sea el que tenga el main, con java -cp fichero.jar fuente1 java -cp fichero.jar paquete.fuente2 java -cp fichero.jar paquete.subpaquete.fuente3

Hay que advertir que estamos en el directorio de nuestro proyecto, que es donde est el fichero.jar. Tambin que hemos separado paquetes, subpaquetes y clases con punto y no con barras \, adems que no hemos puesto .class detrs.

Fichero de manifiesto
Es posible meter un fichero dentro del jar que indique cual es la clase que tiene el main, de forma que al ejecutar no tengamos que decirle cual es. Para ello, en un fichero de texto normal, de nombre por ejemplo manifiesto.txt, y creado en el directorio de nuestro proyecto, ponemos una lnea como esta Main-Class: fuente1

o bien, si el main est en alguna de las otras clases, el contenido podra ser Main-Class: paquete.fuente2

o bien Main-Class: paquete.subpaquete.fuente3

Nuevamente, advertir que hemos puesto todo separado con puntos y sin .class detrs. Ahora, para generar el jar, escribimos

jar cmf manifiesto.txt fichero.jar fuente1.class paquete\fuente2.class paquete\subpaquete\fuente3.class

Es importante fijarse que si las opciones son cmf, hay que colocar primero el fichero de manifiesto y luego el fichero.jar. Si las opciones fueran al revs, cfm, habra que invertir el nombre del fichero de manifieesto y del jar jar cfm fichero.jar manifiesto.txt fuente1.class paquete\fuente2.class paquete\subpaquete\fuente3.class

Una vez generado el jar con su fichero de manifiesto dentro, podemos ejecutarlo as java -jar fichero.jar

La opcin -jar har que java mire el contenido del fichero de manifiesto para buscar el nombre de la clase con el main.

entrada por linea de comandos con Java


Posted on February 23, 2011

Aquellos que como yo vienen de la vieja escuela Java (por ejemplo java 1.1 o 1.2) recordarn que era algo engorroso la cantidad de lineas de cdigo a escribir para ingresar datos por linea de comandos con Java(hay que comprender que desde un principio Java no estuvo pensado para esto), he aqui un ejemplo
?

1 2 3

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

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.in); BufferedReader br = new BufferedReader(isr); System.out.println("Introducir un numero: "); String dato; try { dato = br.readLine(); System.out.println("El numero introducido fue: "+dato); } catch (IOException e) { e.printStackTrace(); } } }

Desde la versin 1.6 de java existe la clase java.io.Console, una clase que nos hace un poco mas intuitivo el manejo (entrada y salida) de datos por linea de comandos, al igual que otros lenguajes como podran ser C/C++. 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.io.Console; public class EntradaDatosNuevaForma { public static void main(String[] args) { Console console = System.console(); if (console == null) { System.err.println("No hay consola."); System.exit(1); } console.printf("Introducir un numero: "); String dato = console.readLine(); console.printf("El numero introducido fue: %s \n", dato); } }

19 20

Introduccion a las clases en JAVA


Etiquetas: Guia JAVA

Introduccin
Las clases son una parte muy importante de los lenguaje de programacin orientado a objetos (POO), estas estructuras nos sirven para crear plantillas de elementos del mundo real, que utilizaremos posteriormente al crear ejemplares a partir de esta plantilla. Por ejemplo, el elemento del mundo real "Persona" podra ser una clase para una aplicacin que gestione clientes.

Java es un lenguaje orientado a objetos, as que exceptuando los tipos de datos bsicos para el manejo de nmeros enteros, caracteres, etctera, todo en java es un objeto. De esta manera en java existen dos grandes tipos de datos: tipos de datos primitivos (int, char, float), y tipos de datos referencia.

Definicin de una clase


Imagine que quiere crear una aplicacin de agenda telefnica, as que necesita gestionar una serie de contactos. Cada uno de estos contactos representa a una Persona. De este modo podemos llegar a la conclusin que nuestra plantilla

para gestionar estos contactos puede ser Persona. Persona sera nuestra clase, la cual contendr una serie de valores que tienen en comn todas las personas como el nombre, apellidos y el nmero de telfono. As que cuando creemos un ejemplar (objeto) de esta clase, este contendr una serie de valores que lo identifican, determinando estos el estado actual del objeto. Los valores definidos en la clase se denominan sus atributos, y el conjunto de operaciones que define una clase, mtodos. La creacin 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, esta necesita definir una serie de atributos que tendrn en comn todos los objetos que creemos a partir de esta clase, como por ejemplo el nombre, los apellidos y el telfono. Para definir los atributos se deben especificar sus tipos, por ejemplo el nombre ser un tipo cadena de caracteres (String) y el telfono ser un nmero entero (int). Esto se realiza de la siguiente manera: ?
1 2 3 4 5
} class Persona { String nombre; String apellidos; int telefono; //Definicion de metodos

Como vemos, siempre los nombres de las clases deben empezar por una letra mayscula, y el nombre de los atributos y mtodos por minscula. Si el nombre tiene espacios se pondr de la siguiente manera: numeroTelfono.

Mtodos de una clase


Una vez que hemos instanciado la clase Persona, y hemos creado un objeto, la manera de poder realizar acciones con este objeto es mediante los mtodos que define la clase. Por ejemplo, si queremos recuperar el nombre de nuestro objeto de tipo Persona, podemos acceder al nombre mediante su atributo, pero es algo desaconsejado, as que cuando necesitemos obtener o modificar el valor de algn atributo, utilizaremos mtodos de la siguiente manera: ?
1
class Persona {

2 3 4 5 6 7 8 9 10 11

String nombre; String apellidos; int telefono;

String getNombre(){ return nombre; }

void setNombre(String nuevoNombre) { nombre = nuevoNombre; }

12
}

13

Como vemos, un mtodo se define con el valor devuelto (String), el nombre (getNombre), una lista de argumentos que podrn ser utilizados en su interior (en este

caso ninguno), y entre llaves, se coloca el cdigo que ejecutar nuestro mtodo al ser llamado. Adems si nuestro mtodo devuelve algn valor, en el mtodo se deber utilizar la palabra reservada return. La regla es que los mtodos que devuelven valores de atributos empiezan por get, y los mtodos que modifican estos valores empiezan por set, ambos seguidos del nombre del atributo que devuelven. Tambin podemos hacer mtodos que no devuelvan ningn valor, utilizando la palabra reservada voidde la siguiente manera: ?
1 2 3
} void nombreMetodo(int argumento1, String argumento2) { //Codigo del metodo

Como podemos observar este mtodo no devuelve ningn valor, as que no necesita usar la palabra return, pero en cambio si recibe dos parmetros, que se utilizarn como una variable normal dentro de este mtodo. Dichos argumentos se pasarn al hacer la llamada al mtodo .

Constructores
Ahora ya podemos crear una clase, declarar sus atributos y definir algunos mtodos para ver y modificar dichos atributos, tan solo necesitamos crear ejemplares de esta clase para empezar a utilizarla. Para poder crear objetos de tipo Persona, se hace uso de un mtodo especial denominado constructor de la clase, este mtodo se sita dentro de la misma clase, y sirva para que podamos crear ejemplares de la clasePersona. Normalmente se utiliza tambin para configurar los valores de los atributos inicialmente, por ejemplo, siguiendo con nuestra clase Persona, su constructor seria algo como esto: ?
1 2
Persona(String nombre, String apellidos, int telefono) { this.nombre = nombre;

3 4 5
}

this.apellidos = apellidos; this.telefono = telefono;

Las peculiaridades de este mtodo son:

No tiene valor devuelto. El nombre del mtodo es el mismo que el de la clase. Suele recibir los valores iniciales utilizados para configurar los atributos del objeto. Para diferenciar el nombre de los atributos del nombre de los parmetros, se utiliza this. delante del nombre de los atributos de la clase. A parte del constructor normal, todas nuestras clases deben tener un denominado constructor por defecto, que no es ms que un constructor sin parmetros y sin cdigo en su interior. Si el compilador no encuentra constructor en una clase, este lo crear automticamente, de cualquier forma, es aconsejable que nosotros lo creemos.

Y hasta aqu, ya podramos hacer una clase Persona totalmente acabada: ?


1 2 3 4 5 6 7 8 9
class Persona { //Atributos String nombre; String apellidos; int telefono; //Constructor Persona() {} //Constructor por defecto Persona(String nombre, String apellidos, int telefono) { this.nombre = nombre; this.apellidos = apellidos;

10 11 12 13 14
} }

this.telefono = telefono;

//Metodos get y set void setNombre(String nombre) { this.nombre = nombre;

15 16 17 18 19 20 21 22

String getNombre() { return this.nombre; } void setApellidos(String apellidos) { this.apellidos = apellidos; } String getApellidos() { return this.apellidos; }

23
void setTelefono(int telefono) {

24 25 26 27 28 29 30 31 32
} } }

this.telefono = telefono;

int getTelefono() { return this.telefono;

Como ya sabemos, el nombre del archivo que contendr la clase se deber llamar Persona.java.

Ahora, ya podemos crear instancias de nuestra clase Persona utilizando el operador new seguido de la llamada al constructor pasndole a este los parmetros necesarios. Esto devolver la referencia a un objeto que deberemos almacenar para su posterior uso, 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", 555555555);

De esta manera lo que devuelve el operador new, lo guardamos en una variable de tipo referencia Personallamada contacto. Y ahora ya podemos comprobar que nuestro programita funciona correctamente haciendo llamadas a los mtodos de la clase Persona y mostrando lo que devuelvan en pantalla de la siguiente manera, todo esto ir justo despus de la lnea anterior: ?
1 2 3 4 5 6 7
//Mediante el (.) accedemos a metodos y atributos del objeto String nombre = contacto.getNombre(); //Mostramos en pantalla el contenido de nombre System.out.println(nombre); contacto.setNombre("Antonio"); nombre = contacto.getNombre(); System.out.println(nombre);

Hola Alejandra, hay muchas maneras de hacerlo, aqu te dejo una posible solucin espero te sirva.

import java.util.Scanner; /** * @author Knight */ public class Calc08 {

// Funcion que calcula el mayor y menor public void Calcula(int n1, int n2, int n3) { if ((n1 > n2) && (n1 > n3)) { System.out.println ("El mayor es: " + n1); if (n2 > n3) { System.out.println ("El menor es: " + n3); } else { System.out.println ("El menor es: " + n2); } } if ((n2 > n1) && (n2 > n3)) { System.out.println ("El mayor es: " + n2); if (n1 > n3) { System.out.println ("El menor es: " + n3); } else { System.out.println ("El menor es: " + n1); } }

if ((n3 > n1) && (n3 > n2)) { System.out.println ("El mayor es: " + n3); if (n1 > n2) { System.out.println ("El menor es: " + n2); } else { System.out.println ("El menor es: " + n1); } } }

public static void main(String[] args) { int num1, num2, num3; Scanner sc = new Scanner(System.in); Calc08 c = new Calc08();

System.out.print ("Ingresa primer numero: "); num1 = sc.nextInt(); System.out.print ("Ingresa segundo numero: "); num2 = sc.nextInt(); System.out.print ("Ingresa tercer numero: "); num3 = sc.nextInt();

c.Calcula(num1, num2, num3); // Aqui se llama la funcion } }

/* En el programa principal se piden los 3 nmeros al usuario y despus de ingresarlos se manda llamar la funcin que calcular el meor y mayor pasandole como parmetros los nmeros anteriormente ingresados.

La funcin imprime en pantalla el resultado, para llamar la funcin debemos crear un objeto del tipo de la clase e invocarla, en el cdigo anterior ste objeto es "c". */

Si tienes alguna duda agrega detalles, saludos! ;)

__________ Hola de nuevo Alejandra, el "package" en Java solo es un contenedor de clases, es decir, se emplea para agrupar las diferentes clases que usas en tu programa, cuando creas un proyecto en NetBeans automaticamente crea el "package" generalmente lo llama como tu clase principal, a ste le puedes agregar varias clases.

Si necesitas usar el package, puedes pedir los nmeros en la clase principal y poner el mtodo que determina cual es el mayor y el menor en otra clase que va pertenecer al mismo package.

El cdigo queda tal cual como esta arriba, solo hay que cortar el mtodo "Calcula", crear en el mismo proyecto en NetBeans otra clase con el nombre que gustes (donde dice "Source Packages" click derecho > "New" > "Java Class...") y pegar en ella el mtodo cortado anteriormente, finalmente en la clase principal tienes que hacer que herede de la clase que acabas de crear, sto se hace con el "extends" mas el nombre de la clase que creaste.

Entonces tendrs 2 clases, donde sta el mtodo, yo la llame "Calcular" y la principal que hereda de "Calcular":

//Clase mtodo calcular

package calc08; public class Calcular { //Aqu el mtodo "Calcular" }

//Clase principal "main"

package calc08; import java.util.Scanner; public class Calc08 extends Calcular{ public static void main(String[] args) { //Aqu el cdigo del main } }

//Saludos!

-----------------------------------------------------------------------------------------

El saber cul es el mayor de dos nmeros es uno de los primeros ejemplos que hacemos cundo empezamos a aprender un lenguaje de programacin.

La idea es muy simple. Pedimos al usuario dos nmeros y nuestro cdigo tiene que determinar cul de los dos nmeros es ms grande.

Lo primero ser pedir los nmeros al usuario. Para esto nos apoyamos en la clase Scanner.

Scanner reader = new Scanner(System.in); int iNumero1, iNumero2;

System.out.println("Dame el primer nmero"); iNumero1 = reader.nextInt(); El mtodo .nextInt() nos devolver lo que el usuario haya introducido en un valor entero. Si quieres ms detalle sobre cmo obtener lo que el usuario ha introducido puedes leerte "Lectura de datos en Java con Scanner"

Ahora vamos con el centro del problema. Saber qu numero es mayor. Para ello vamos a utilizar la estructura de seleccin if. 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 cdigo Java quedara de la siguiente forma con la estructura if:

if (iNumero1>iNumero2) System.out.println(iNumero1 + " es mayor que " + iNumero2);

else System.out.println(iNumero2 + " es mayor que " + iNumero1); Ya tenemos nuestro cdigo Java para saber cul es el mayor de dos nmeros.

Você também pode gostar