[Dúvida] Como fazer uma aplicação gerar um arquivo .jar?

Boa tarde pessoal, alguém saberia o código para gerar um arquivo .jar?

Não estou falando de, por exemplo, no Net beans clicar em “construir projeto principal”.

Alguém saberia?

um jar é um arquivo zip, só q com outra extensão.

agora como você vai arrumar a estrutura é outra história.

[]´s

E como eu faço isso então? Uso OutputSream mesmo?

http://www.guj.com.br/posts/list/38093.java

cara, me diz o que você tá querendo fazer, pq talvez uma simples task do ant resolva.

[]'s

Tenho um código de encriptação de arquivos o qual ele, após a encriprtação, divide o arquivo em 2. Um deles recebe informações de ip e MAC da máquina em que vai rodar depois disso encapsulo tudo dentro de um .jar

Peraí, filhão. Devagar que eu acabei de acordar :slight_smile:

Você tá querendo compilar e empacotar umas classes java em tempo de execução ou só quer compactar uns arquivos no formato .jar, como se fosse um zip ?

abs,

Quero reunir informações de várias classes e criar um uma janela que trate evento (JFileChooser)dentro de um jar

Ainda não consegui te entender, cara.

continuo com a mesma duvida da pergunta q fiz acima…

Vejamos se consigo me expressar melhor agora:

Minha aplicação encripta um arquivo, e esse arquivo só pode ser desncriptado na máquina do cliente a qual já tenho as informações de IP e MAC:

1 - Através de um JFileChooser eu seleciono o arquivo a ser encriptado
2 - Clico no botão que dispara a ação para encriptar
2.1 - Esta ação consiste em dividir este arquivo em 2
2.2 - Um arquivo tem uma extensão qualquer (até aki está implementado corretamente)
2.3 - O outro deve ser um .jar que além de ter o conteúdo do arquivo tem as informações de IP e MAC da máquina do cliente.
2.4 - Somente o cliente poderá abrir esse arquivo, pois ao clicar no mesmo ele irá fazer a conferência de IP e MAC, se bater corretamente abrirá um JFileChooser, senão irei mostrar um JOptionPane mesmo.

Fui claro agora?
Obriago pela atenção.

Acho que entendi.

Faz o seguinte, deixa o jar com o código que valida os arquivos já compilado e empacotado, em alguma pasta do projeto.
Depois, na sua classe vc copia o arquivo, e adiciona os 2 arquivos utilizando a api ZIP que já tem na JRE, tudo via código java.

Depois faz o que quiser com esse jar.

Será q isso atende ?

[]'s

Não estou sabendo nem gerar o .jar

Não sei pq tem algo de errado na minha sintaxe da JarOutputStream

Eu fiz isso:

[code]public class SeparaArquivos {
public static void separa(File arquivo) throws IOException {
FileReader input = null;
JarOutputStream output1 = null;
// FileWriter output1 = null;
FileWriter output2 = null;
try {
input = new FileReader(arquivo.getAbsolutePath());
output1 = new JarOutputStream(System.getProperty("user.dir") + "//P1.jar");
// output1 = new FileWriter(System.getProperty("user.dir") + "//P1.jar");
output2 = new FileWriter(System.getProperty("user.dir") + "//P2.enpt");
long tamanho = arquivo.length();
long indice = 0;
boolean primeiro = true;

       while(indice < tamanho){
           int lido = input.read();
           if(primeiro)
               output1.write(lido);
           else
               output2.write(lido);
           primeiro = !primeiro;
           indice++;
       }
   } finally    {
       if (input != null)  {
           input.close();
       }
       if (output1 != null)    {
           output1.flush();
           output1.close();
       }
       if (output2 != null)    {
           output2.flush();
           output2.close();
       }
   }

}
}[/code]

Onde estou errando?

o conteudo das classes desse jarzinho vai ser dinamico ?

se não não tem necessidade de ficar gerando o mesmo jar sempre, deixa ele gerado e depois so copia, coloca os arquivos dentro e manda pro cliente.

mas se for dinamico, manda o erro q vc ta tomando aí.

abs,

É dinâmico sim, afinal estou gerando este .jar a partir de um arquivo que eu selecionei.

Diz que não pode encontrar o construtor da JarOutputStream. Mas segue a pergunta nesse contrutor, o que ele vai retornar? byte? File?

Erro:

cannot find symbol
symbol: constructor JarOutputStream(java.lang.Stream)
location class java.util.jar.JarOutputStream

Quero dizer se o conteudo das classes do jar é dinâmico, se o que só muda são os arquivos gerados…

Acho q vc tem que adicionar classe por classe no jar, dá uma olhada aqui:

http://www.java2s.com/Code/Java/File-Input-Output/CreateJarfile.htm

http://www.java2s.com/Code/Java/File-Input-Output/Zip-Jar-Tar.htm

[]'s

Tá certo, ele cria o .jar mas como inserir informações neste jar. Eu tenho outras duas classes que necessito que as informações delas retornem dentro deste jar. E preciso dessas classes também.

São elas:
esta obtém i endereço IP da máquina

[code]public class ObterIP {

/** Creates a new instance of ObterIP */
public static String ObterIP() {
    String ip = "";

    try {
        java.net.InetAddress i = java.net.InetAddress.getLocalHost();

        ip = i.getHostAddress();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return ip;
}

}[/code]

Esta obtém o endereço MAC

[code]import java.net.NetworkInterface;

import java.util.Enumeration;

public class ObterMAC {

/**
 * Creates a new instance of ObterMAC
 */
public ObterMAC() {}

public StringBuffer obterMac() throws Exception {
    Enumeration en = null;

    en = NetworkInterface.getNetworkInterfaces();

    StringBuffer sb = new StringBuffer();

    while (en.hasMoreElements()) {
        NetworkInterface iface = (NetworkInterface) en.nextElement();
        byte separado[] = iface.getHardwareAddress();

        if (iface.isUp() && (separado != null) && (iface.getName().indexOf("eth") > -1)) {
            boolean doispontos = false;

            for (byte parte : separado) {
                if (doispontos) {
                    sb.append(":");
                }

                doispontos = true;
                sb.append(byteToHexString(parte));
            }

            break;
        }
    }

    return sb;
}

static String byteToHexString(int b) {
    String string = "00" + Integer.toHexString(b);

    return string.substring(string.length() - 2, string.length());
}

public static void retornoMAC(String[] retorno_mac) {
    ObterMAC om = new ObterMAC();

    try {
        StringBuffer sb = om.obterMac();

// System.out.println(sb);
} catch (Exception e) {
e.printStackTrace();
}
}
}[/code]

Preciso dessas duas classes bem como do conteudo que elas retornam. Motivo: quando eu executar esse jar ele vai checar (através dessas classes) o IP e o MAC da máquina. Bateu? muito bem, abre o jar, não bateu, Exibe uma mensagem que não é possível executar a aplicação

cara, me explica o que vc precisa fazer, não como vc quer fazer… pq aí fica mais fácil…

Preciso fazer com que este jar seje um miniaplicativo. Ao dar um duplo clique nele, ele confere o endereço de IP e MAC da máquina, se for o mesmo endereço que tem armazenado nele, abrirá então um JFileChooser, senão somente uma mensagem de que aquele arquivo não pode ser executado ali.