Erro no build do jar

31 respostas
java
M

Boa tarde,

eu executo um codigo para enviar email pelo metodo POST pelo netbeans, e o email é recebido normalmente, quando do um build and clean e executo o .jar o email apresenta erro

ao mapear o que o netbeans faz, peguei o comando enviado quando executo no mesmo

se eu abrir um cmd e digitar :

"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" -Dfile.encoding=UTF-8 -classpath F:\NetBeans\VerificaRobo\build\classes verificarobo.MainWindow

meu programa envia o email normalmente

porem dessa segunda maneira fica o cmd aberto travado, eu gostaria de “limpar” isso da tela

teria um modo correto de buildar ou alguma configuração que fiz errada?

desde ja meu obrigado

31 Respostas

A

Ola @Mendes_Hemerson,

No seu .jar precisa ter um arquivo chamado MANIFEST.MF dentro da pasta META-INF que ira conter um mapeamento para o class-path indicando os jar’s que utiliza no projeto e um mapeamento para a main-class, ex. de como seria esse arquivo:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_25-b06 (Sun Microsystems Inc.)
Class-Path: lib/quartz-2.1.6.jar lib/servlet-api.jar lib/log4j-1.2.17.
 jar lib/slf4j-api-1.6.1.jar lib/eclipselink-2.3.2.jar lib/javax.persi
 stence-2.0.3.jar lib/org.eclipse.persistence.jpa.jpql_1.0.1.jar lib/s
 lf4j-log4j12-1.6.1.jar lib/ojdbc6.jar lib/commons-codec-1.7.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: verificarobo.MainWindow

Com isso, você pode construir um .bat ou .sh se usa linux e fazer a invocação do jar ou até mesmo cadastrar como um serviço do seu sistema, espero que seja útil, abraços.

M

Bom dia,

eu manipulei o manifest e deixei o mesmo de acordo com o citado, buildei o jar e verifiquei que o manifest se encontra presente

Ao fazer o teste ainda assim nao consegui enviar, da algum erro no post

segue codigo, quem sabe assim possa facilitar

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.URL;

import java.net.URLConnection;

import java.util.Arrays;

import javax.swing.JTextArea;

public class EnviaEmail {

/**
 * @param msg
 * @param janela
 * @param status
 * @param server
 * @param log_ocorrencia
 */
public void enviaEmail(String msg, JTextArea janela, String status, String server, JTextArea log_ocorrencia) {
    try {
        URL url = new URL("url_post");
        URLConnection con = url.openConnection();
        // specify that we will send output and accept input
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setConnectTimeout(20000);  // long timeout, but not infinite
        con.setReadTimeout(20000);
        con.setUseCaches(false);
        con.setDefaultUseCaches(false);
        // tell the web server what we are sending
        con.setRequestProperty("Content-Type", "text/xml");
        OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
        String aux = "<Email xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MDAWebApi.Models\">\n"
                + "  <Assunto>[Report] Servidor " + server + ", " + status + "</Assunto>  \n"
                + "  <Corpo>" + msg + " Problema INTERNO, NÃO abrir chamado</Corpo>\n"
                //+ "  <DataEnvio>" + data + "</DataEnvio>\n"
                + "  <De>[email removido]</De>\n"
                + "  <Para>[email removido]</Para>\n"
                + "  <SenhaMda>555</SenhaMda>\n"
                + "  <UsuarioMda>555</UsuarioMda>\n"
                + "</Email>";
        writer.write(aux);
        // janela.append(aux + "\n\n");
        //   System.out.printf(aux);
        writer.flush();

        // reading the response
        InputStreamReader reader = new InputStreamReader(con.getInputStream());
        StringBuilder buf = new StringBuilder();
        char[] cbuf = new char[2048];
        int num;
        while (-1 != (num = reader.read(cbuf))) {
            buf.append(cbuf, 0, num);
        }
        String result = buf.toString();
        log_ocorrencia.append("\nResponse from server after POST:\n" + result + "\n");
        janela.append("\nE-mail enviado com sucesso!\n\n");
        log_ocorrencia.append("\n\tE-mail enviado com sucesso!\n");

    } catch (Throwable t) {
        janela.append(Arrays.toString(t.getStackTrace()));
        janela.append("\nVerificar Erro de envio de E-mail!\n\n");
        log_ocorrencia.append("\nVerificar Erro de envio de E-mail!\n\n");
    }
}

}

Erro:
[sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source), sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source), verificarobo.EnviaEmail.enviaEmail(EnviaEmail.java:59), verificarobo.VerificaRobo.checaservidor(VerificaRobo.java:107), verificarobo.VerificaRobo.inicia(VerificaRobo.java:208), verificarobo.VerificaRobo.run(VerificaRobo.java:200), java.lang.Thread.run(Unknown Source)]
Verificar Erro de envio de E-mail!

ps: é algo bem simples feito as pressas somente para me enviar um email se tiver um processo travado em um servidor que devo monitorar

desde ja meu obrigado

A

Pelo erro parece que por algum motivo ele não recebeu a url_post, de onde vem este valor?

M

Desculpe pela simplicidade, POST é uma novidade para mim, nao entendi muito bem a sua pergunta

Voce deseja o html post que eu subo na url?

A

Não tem problema, olha só:

URL url = new URL(“url_post”);
URLConnection con = url.openConnection();

seu código abre uma conexão nesta url_post, que endereço é esse ?

M

http://www.mdasolucoes.com.br/mdawebapi/api/Email

A

ok, mas “url_post” é um String fixa, em que ponto ela vira uma url(http://www.mdasolucoes.com.br/mdawebapi/api/Email)?

M

propria declaração dela

eu troquei para enviar a um colega de trabalho indicando onde puis e nao vi q nao tirei as aspas, porem nas aspas esta a minha url certa, nao é uma variavel

ex meu codigo:

<strong>code</strong>

try {

URL url = new URL(“<a href="http://www.mdasolucoes.com.br/mdawebapi/api/Email">http://www.mdasolucoes.com.br/mdawebapi/api/Email</a>”);

URLConnection con = url.openConnection();

<strong>code</strong>
M

nao sei se ira ajudar

rodei ele pelo PLAY do netbeans, o response que recebo é esse:

Response from server after POST:

[Report] Servidor 192.168.0.19, iSMS inoperante00 Tue Aug 23 11:25:17 BRT 2016
Robo iSMS no servidor 192.168.0.19 contem 2 robos ativos, por favor verificar2016-08-23T11:25:17.3722869-03:00[email removido]true192.168.0.26795556[email removido]555192.168.0.2<Usu]rioEnvio>MDAWebApi555

A

pelo que estou entendendo quando você roda pela IDE funciona, mas quando roda standalone da problema ao abrir a conexão, é isso ?

M

exato

A

muito estranho, no código não aparenta nenhum erro, tem firewall ligado algo do tipo?

M

nada, mesmo no pc de casa mesmo erro.

porem ao abrir o prompt de comando e digitar

“C:\Program Files\Java\jre1.8.0_101\bin\java.exe” -Dfile.encoding=UTF-8 -classpath F:\NetBeans\VerificaRobo\build\classes verificarobo.MainWindow

ou

“C:\Program Files\Java\jdk1.8.0_101\bin\java.exe” -Dfile.encoding=UTF-8 -classpath F:\NetBeans\VerificaRobo\build\classes verificarobo.MainWindow

ele abre meu standalone e o email eh enviado normalmente
segundo um colega de trabalho, com esse comando eu estou recompilando a classe main
como falei, entendo pouco dessas coisas ainda

por isso que acredito ser algo que foi setado ou mal configurado para a criação do .jar

A

como você esta gerando o jar? esta usando uma IDE ?

M

clico na vassoura e martelo do netbeans (“limpar e construir” shift+f11) e busco na pasta dist o arquivo criado

sempre usei essa maneira, quando linko uma biblioteca externa ele cria uma pasta lib com o que foi linkado, nesse caso nao tm nada, somente o .jar e um read me

A

esta tudo correto, deveria fucnionar, estou pensando o que pode ser.

A

brother como esta configurado o java? JAVA_HOME a Path e o CLASSPATH ?

M

Nas variaveis de ambiente tenho somente:
path: C:\ProgramData\Oracle\Java\javapath

A

esta errado, adiciona como eu faço e testa por favor:

Configuração das variáveis de ambiente

se fosse só para executar poderia por apenas a jre, mas faz como eu faço no link acima para testarmos.

M

desculpe a demora

ficou assim

path: C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio;C:\Program Files (x86)\Skype\Phone;C:\psexec;C:\Program Files\Java\jdk1.8.0_51\bin;C:\Program Files (x86)\apache-maven-3.3.3\bin;$MAGICK_HOME/bin:$PATH;%LiveConsolePath%;C:\Program Files\Java\jdk1.8.0_101;C:\Ruby21\bin;C:\Program Files (x86)\apache-maven-3.3.3\bin;$MAGICK_HOME/bin:$PATH;%LiveConsolePath%

classpath: .;JAVA_HOME

java_home: C:\Program Files\Java\jdk1.8.0_101

somente alterei o path da jdk, o meu nao eh a 151

[sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source), sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source), verificarobo.EnviaEmail.enviaHotmail(EnviaEmail.java:59), verificarobo.VerificaRobo.checaservidor(VerificaRobo.java:107), verificarobo.VerificaRobo.inicia(VerificaRobo.java:208), verificarobo.VerificaRobo.run(VerificaRobo.java:200), java.lang.Thread.run(Unknown Source)]
Verificar Erro de envio de E-mail!

mesmo erro

A

que coisa, tem como me mandar esse jar? agora confesso que estou curioso :slight_smile:

se caso puder, o gmail ira bloquear o envio do jar, então compartilha no docs, não quero teus fontes, quero só o jar para executar, se funcionar o máximo que ira acontecer é um acesso negado, segue meu email, abraços.

[email removido]

M

enviei do meu email do trabalho em formato .rar

foi num email bem humorado até :slight_smile:
hehe

M

Bom dia

conseguiu reproduzir o mesmo erro que o meu?

att,

A

brother ainda não testei, mas vou fazer assim que possivel.

A

quando você digita no console java -version o que aparece ?

Uma coisa que reparei é que:

não é classpath e sim CLASS_PATH, ex:
variável: CLASS_PATH valor ,;JAVA_HOME

não é java_home mas sim JAVA_HOME, ex:
variável: JAVA_HOME valor C:\Program Files\Java\jdk1.8.0_101

o path também tem problema ele deve apontar para a bin da JDK, ex:
C:\Program Files\Java\jdk1.8.0_101\bin

M

C:>java -version
java version "1.8.0_101"
Java™ SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot™ 64-Bit Server VM (build 25.101-b13, mixed mode)

resto esta ok, somente o classpath que estava sme o “_”

vou testar aqui depois passo o resultado :slight_smile:

M

ainda nd =/

to começando a achar mais facil mudar o metodo post xD hehehe

A

tem que funcionar, como você faz para executar o jar? java -jar?
alia cima o path também estava errado, não apontava para a pasta bin, ajustou? lembra que depois de qualquer ajusta no windows é preciso fechar o etrminar (DOS) e abrir novamente para as modificações terem efeito.

M

eu dou 2 cliques no .jar para executar

sim, ajeitei tanto o caminho da jdk quanto o “_”

A

desculpa ser insistente :slight_smile: mas no path não era só o underscore ele não apontava para a pasta /bin ajustou isso? bom a única coisa que sei é que tem que funcionar como a IDE, não tem nenhuma lib que esqueceu de declarar no manifesto né? se o erro persistir experimente reinstalar o Java ja estou ficando sem opções :slight_smile:

M

relaxa, n eh insistencia, eh conferir, msm pq as vezes olho rapido pq to meio enrolado no trampo

CLASS_PATH:".;JAVA_HOME"

JAVA_HOME: “C:\Program Files\Java\jdk1.8.0_101\bin”

Path: “C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio;C:\Program Files (x86)\Skype\Phone;C:\psexec;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files (x86)\apache-maven-3.3.3\bin;$MAGICK_HOME/bin:$PATH;%LiveConsolePath%;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Ruby21\bin;C:\Program Files (x86)\apache-maven-3.3.3\bin;$MAGICK_HOME/bin:$PATH;%LiveConsolePath%”

Manifest: “Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_25-b06 (Sun Microsystems Inc.)
Class-Path: lib/quartz-2.1.6.jar lib/servlet-api.jar lib/log4j-1.2.17.
jar lib/slf4j-api-1.6.1.jar lib/eclipselink-2.3.2.jar lib/javax.persi
stence-2.0.3.jar lib/org.eclipse.persistence.jpa.jpql_1.0.1.jar lib/s
lf4j-log4j12-1.6.1.jar lib/ojdbc6.jar lib/commons-codec-1.7.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: verificarobo.MainWindow”

Criado 22 de agosto de 2016
Ultima resposta 31 de ago. de 2016
Respostas 31
Participantes 2