Criar pacote jar executável multiplataforma :?:
Ola pessoal, seguinte to com 1 pequeno problema que na verdade é simples de resolver.
Quem puder dar 1 dica ae ta blz… é sobre criação de pacotes JAR.
Quanto da criação, compilação e execução normal o programa está funcionando perfeitamente mas quando vou criar um pacote .jar to tendo alguns erros.
Seguinte: Tenho a seguinte estrutura
C:\app\br\edu\myjar\character\alfa
C:\app\br\edu\myjar\character\numbers
A idéia do name space é: \br\edu\myjar\character
Dentro de alfa tenho as seguintes classe:
package br.edu.myjar.character.alfa;
public class Vogais {
private char[] v = {'a','e','i','o','u'};
public void getChar(){
for (int i=0; i<v.length; i++) {
System.out.print(v[i]+" ");
}
System.out.println(); // Pula uma linha.
}
}
E…
package br.edu.myjar.character.alfa;
public class Consoantes {
private char[] c = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'};
public void getChar(){
for (int i=0; i><c.length; i++) {
System.out.print(c[i]+" ");
}
System.out.println(); // Pula uma linha.
}
}
… ou seja, uma classe que imprime vogais e outra que imprime consoantes. Até aki tá tdo blz.
Agora dentro de numbers tenho a seguinte classe:
package br.edu.myjar.character.numbers;
public class ZeroNove {
private int[] n = {0,1,2,3,4,5,6,7,8,9};
public void getInt(){
for (int i=0; i><n.length; i++) {
System.out.print(n[i]+" ");
}
System.out.println(); // Pula uma linha.
}
}
Essa classe imprime números de 0 - 9. Até aki tbem ta tdo blz.
Agora é o seguinte, baixo de app tenho o programa testador:
import br.edu.myjar.character.alfa.*;
import br.edu.myjar.character.numbers.*;
class TestaAlfaNumbers {
public static void main(String[] args)
{
// Classes de alfa.
Vogais v = new Vogais();
v.getChar();
Consoantes c = new Consoantes();
c.getChar();
// Classe de numbers.
ZeroNove z = new ZeroNove();
z.getInt();
}
}// Fim do programa.
Aki tbem ta tdo blz e o programa compila, gera a saída:
C:\app>java TestaAlfaNumbers
a e i o u
b c d f g h j k l m n p q r s t v w x y z
0 1 2 3 4 5 6 7 8 9
Como podem ver roda perfeitamente. No entanto, minha idéia é de pegar o TestaAlfaNumbers.class e transformar em um TestaAlfaNumbers.jar.
Então em app criei o arquivo de manifesto Manifest.mf com o conteúdo para que o .jar possa ser um executável multiplataforma:
Manifest-Version: 1.0
Created-By: 1.5.0_10 (Sun Microsystems Inc.)
Main-Class: TestaAlfaNumbers
Name: TestaAlfaNumbers.class
Java-Bean: True
Então agora estou com o pequeno problema que lhes falei. Se eu criar e executar o jar assim:
// Criando
C:\app>jar -vcfm TestaAlfaNumbers.jar Manifest.mf *.class
added manifest
adding: TestaAlfaNumbers.class(in = 534) (out= 352)(deflated 34%)
// Executando
C:\app>java -jar TestaAlfaNumbers.jar
Exception in thread "main" java.lang.NoClassDefFoundError: br/edu/myjar/character/alfa/Vogais
at TestaAlfaNumbers.main(TestaAlfaNumbers.java:10)
Minha idéia é a de criar o jar de somente os .class porque nos diretórios eu eu tenho os .java
e os arquivos de bkp que não quero que entrem no jar, mas como vimos desse modo ele cria somente
como .class da raiz e não pega os outros .class… e é por isso que dá pau…
Mas se eu fizer assim funciona porém todos os arquivos da hierarquia estão lá e não apenas os .class:
C:\app>jar -vcfm TestaAlfaNumbers.jar Manifest.mf *
...
...
// Executando
C:\app>java -jar TestaAlfaNumbers.jar
a e i o u
b c d f g h j k l m n p q r s t v w x y z
0 1 2 3 4 5 6 7 8 9
…andei dando uma olhada em um tutoriais em ingles… e me parece que dá pra resolver de duas maneiras:
-
colocando junto com a linha de comando todos os caminhos dos .class.
Não consegui fazer, mas mesmo se tive conseguindo não sei se seria iteressante esse modo
pois imagina uma aplicação robusta com milhares de classes… seria um Deus nos acuda… -
colocando uma diretiva class-path no Manifest.mf… tentei mas nao deu certo…
…o material em ingles que achei é muito confuso e o cara tenta ensinar a fazer isso com programas
muito grandes e complexos… se ele tive usado um idéia simples teria sido melhor…
e que sabe agora ao invés de pedir socorro eu estaria ajudando… heh he heh
Pessoal, quem puder me dar uma ajuda ae fico (eu e outros) muito agradecido…só falta isso…
Brigaduuuuuuuuuuuuuuuuuuuuuuuuuu