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

aix

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

aix

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?

aix

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

aix

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

aix

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

M

exato

aix

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

aix

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

aix

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

aix

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

aix

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

aix

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,

aix

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

aix

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

aix

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 “_”

aix

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