Quero expressar minha indignação

38 respostas
E

Sinceramente, que coisa mais sem fundamento.

Hoje, após a semana toda tentando, consegui descubrir a solução para um problema, achei a solução aqui no forum mesmo.
Eu queria usar um .jar externo para um arquivo .jar meu e descubri que isso podia ser feito pelo manifesto adicionando Class-Path: …

Ótimo! Fiz isto e agora meu programa vai funcionar! Vai o escambau…
Não funcionou. Fiquei umas 3 horas mudando tudo que eu achava que podia dar errado, pesquizei mais umas mil vezes e sempre achava a mesma solução e escrita do mesmo jeito que eu escrevi.

Ai resolvi fazer alguns testes bem loucos e pra isso tirei a linha Class-Path… do manifesto. Ai quando executei o .jar veio uma mensagem dizendo que havia erro na definição da minha classe main.
Abri o manifesto e não tinha nada de errado. P…a q s…o! Sei lá porque, tentei dar um enter depois da declaração da classe main e deixar o cursor na nova linha… e funcionou!
Então me ocorreu: vou tentar fazer o mesmo com o classpath. E deu certo.

Só fiquei pensando depois, que diabos isso faria diferença e, se quando eu rodava avisava esse “erro” para a classe main, porque capeta não acontecia o mesmo para a classpath!

Pode ter gente rindo da minha cara agora, mas diga-se de passagem que nunca li ou vi alguêm dizer: “da um enter no final da linha senão não vai funcionar”.

38 Respostas

T

E qual o motivo da sua indignação?

T

Bem-vindo ao mundo Java :stuck_out_tongue:

Como o Java foi projetado pela Sun e o pessoal da Sun trabalha com Solaris (Unix), então ele tem algumas dessas peculiaridades.

É parecido com aquele problema que antigamente as makefiles tinham (makefiles são arquivos para compilação de programas que devem ser usados com o programa make).

Antigamente (pode ser que você ainda encontre esse problema :frowning: ) se você escrevia uma makefile, havia diferença entre tabs e espaços no início das linhas (você precisa usar tabs, não espaços). É claro que isso você não percebe com uma makefile impressa em papel; só dá para pegar esse problema usando o vi no modo “set showtabs on”. Argh!

danieldestro

Seu arquivo Manifest deve terminar com duas quebras de linha (duas linhas em branco).

Exemplo:

Manifest-Version: 1.0
Class-Path: meu-querido.jar
V

Humm eu já li muita coisa na internet, e nos sites que eu li, o autor sempre enfatizava que tem que ter uma quebra de linha extra. Se eu não me engano, no próprio site da Sun, eles deixam bem claro isso quando mostram exemplo de arquivo manifest…

ps: já aconteceu o mesmo comigo…

MarcioTavares

Porque isso ainda não foi corrigido? Prioridades?

T

Tem várias coisas meio “toscas” que nunca foram corrigidas, ou que nunca o serão porque irão quebrar um monte de código preexistente (“WONTFIX”).
Só dar uma pesquisada no bugs.sun.com.

renatosilva

Por que ainda existe JAR? :roll:

MarcioTavares

thingol:
Tem várias coisas meio “toscas” que nunca foram corrigidas, ou que nunca o serão porque irão quebrar um monte de código preexistente (“WONTFIX”).
Tudo bem, mas nesse caso aí do manifest, fazer o “interpretador” do arquivo aceitar 0…N quebras de linha provavelmente não vai quebrar nada. Ou será que eles colocaram tudo no mesmo saco de “problemas pequenos não críticos” e deixaram pra lá?

T

Acho que deixaram para lá.

aorocha

se não existir jars vai existir oque no lugar, tem um novo jeito de empacotar?

marcushlm

eu fico indignado quando nao funciona…
depois que funciona eu acho eh engraçado :lol:

se não existir jars vai existir oque no lugar, tem um novo jeito de empacotar?

pois é, oq substituiria eles?
eu gosto do sistema de jar’s :wink:

J

marcushlm:
eu fico indignado quando nao funciona…
depois que funciona eu acho eh engraçado :lol:

se não existir jars vai existir oque no lugar, tem um novo jeito de empacotar?

pois é, oq substituiria eles?
eu gosto do sistema de jar’s :wink:

Nao existe, mas vai existir. Estou com preguisa de procurar, então vai ai no google, no the server side ou então na JCP e pesquisa por Java Package System.

[]'s

J

Então, informática não é uma ciência exata.

zirocool

Realmente, depois de começar a perder pacotes na rede, e o cara soh reiniciar a máquina e voltar a pingar, com respostas mto rápidas, concordo com a tua máxima… :smiley:

renatosilva

se não existir jars vai existir oque no lugar, tem um novo jeito de empacotar?

Of course my friend! Como disseram tem uma JSR rolando mas não lembro qual é, amanhã eu posto…

marcushlm:

pois é, oq substituiria eles?
eu gosto do sistema de jar’s :wink:

Você gosta de JARs? Cara, experimenta desativar o seu senso de “Java is cool” e repensar sobre eles. Depois posta aqui sua conclusão :smiley:

Ah, e depois lê isso aqui, eu não explico bem os grilos que tenho com JARs mas acho que dá pra entender um pouquinho:

http://br.geocities.com/renato3110/JAX.htm

renatosilva

Realmente, depois de começar a perder pacotes na rede, e o cara soh reiniciar a máquina e voltar a pingar, com respostas mto rápidas, concordo com a tua máxima… :D

Caraios!!! Isso aconteceu comigo hoje :lol: :lol: :lol:

marcelomartins

2 coisas:

:arrow: Informática não é uma ciencia exata. Eu digo isso semanalmente. Exatas são psicologia, teologia e coisas do tipo. Mas informática não.

:arrow: Uma dica pra não se incomodar com os Jars: use o netbeans que ele faz tudo funcionar direitinho!

plentz

Claro que ler a documentação seria a última coisa que qualquer um faria.

http://java.sun.com/docs/books/tutorial/deployment/jar/modman.html

zirocool

marcelomartins:
2 coisas:

:arrow: Informática não é uma ciencia exata. Eu digo isso semanalmente. Exatas são psicologia, teologia e coisas do tipo. Mas informática não.


Eles devem ficar felizes por nós, somos clientes em potencial para psicólogos, psiquiatras, neurologistas entre outros.

marcelomartins:

:arrow: Uma dica pra não se incomodar com os Jars: use o netbeans que ele faz tudo funcionar direitinho!

Eclipse tbm faz um jar funcionar mto bem, e é mais leve q o netbeans. :smiley:

Rafael_Steil

JAR tinha que ter versionamento. Isso sim seria util.

Rafael

Thiagosc

Desde 1999 à sua disposição:

A implementação:

Boa sorte! :slight_smile:

Obs: quem diz que .Net tem essa “imensa vantagem” realmente deveria pesquisar um pouco mais, pois Java tem isso desde antes do advento do .Net.

A

Ainda não, pelo que eu saiba, mas já existe a JSR-277, que propõe o Java Module System. Mais: http://jcp.org/en/jsr/detail?id=277 :wink:

[]s.

Rafael_Steil

Desde 1999 à sua disposição:

A implementação:

Boa sorte! :slight_smile:

Obs: quem diz que .Net tem essa “imensa vantagem” realmente deveria pesquisar um pouco mais, pois Java tem isso desde antes do advento do .Net.

Implementaco de um engine por uma empresa X eh muito diferente de ter suporte “oficial”. JAR tinah que ter versionamento nativo na VM, e nao via hacks de classloaders ou frameworks a parte.

Rafael

grprado

Para gerar o jar e o manifest eu fico com o <jar> do ant e uma task para varrer o diretorio /lib e adicionar automaticamente no Class-Path do manifest.

Fica bunitinho :smiley:

Leozin

zirocool:

marcelomartins:

:arrow: Uma dica pra não se incomodar com os Jars: use o netbeans que ele faz tudo funcionar direitinho!

Eclipse tbm faz um jar funcionar mto bem, e é mais leve q o netbeans. :D

como o meu conhecimento em ant é baixo, quando eu termino um projeto no eclipse eu boto tudo no netbeans pra ele gerar toda a distribuição… Tem alguma coisa melhor pra mim implementar no eclipse? Algo que faça o mesmo?

marcelomartins

Leozin:
zirocool:

marcelomartins:

:arrow: Uma dica pra não se incomodar com os Jars: use o netbeans que ele faz tudo funcionar direitinho!

Eclipse tbm faz um jar funcionar mto bem, e é mais leve q o netbeans. :D

como o meu conhecimento em ant é baixo, quando eu termino um projeto no eclipse eu boto tudo no netbeans pra ele gerar toda a distribuição… Tem alguma coisa melhor pra mim implementar no eclipse? Algo que faça o mesmo?


Esse comentário não deve ser ignorado. Já vi também quem utilize o netbeans para criar os projetos, e depois programa no Eclipse usando o script do ant gerado no netbeans.

renatosilva

[/quote]

Bom como o Alex já postou a JSR pra substituir os jars é a 277, o mais hilário é o próprio JCP fazer uma declaração como essa:

plentz:
Claro que ler a documentação seria a última coisa que qualquer um faria.

http://java.sun.com/docs/books/tutorial/deployment/jar/modman.html

Ué, mas aí ele não fala de duas quebras, apensa uma.

J

marcelomartins:
Leozin:
zirocool:

marcelomartins:

:arrow: Uma dica pra não se incomodar com os Jars: use o netbeans que ele faz tudo funcionar direitinho!

Eclipse tbm faz um jar funcionar mto bem, e é mais leve q o netbeans. :D

como o meu conhecimento em ant é baixo, quando eu termino um projeto no eclipse eu boto tudo no netbeans pra ele gerar toda a distribuição… Tem alguma coisa melhor pra mim implementar no eclipse? Algo que faça o mesmo?


Esse comentário não deve ser ignorado. Já vi também quem utilize o netbeans para criar os projetos, e depois programa no Eclipse usando o script do ant gerado no netbeans.

Muito bom. Em vez de pegar 2 ou 3 horas para aprender um ant ou maven faz esse bacalhau todo…

Leozin

e a minha pergunta não foi respondida :frowning:

danieldestro

Aprende a usar Ant minimamente.

Thiagosc

“Hack” é uma coisa feita de qualquer jeito por alguém no fim de semana. O OSGI é consórcio de empresas, e o framework é uma especificação bem feita para suprir essa necessidade que você citou.

O Eclipse Equinox é uma implementação opensource, a mesma usada pelo Eclipse.

Agora estar embutido na JVM lhe fará sentir-se melhor? É um efeito de sugestão, assim como pacientes que alegam ter se curado mas tomaram apenas placebos?

Conclusão: Java já tem isso há 7 anos.

MarcioTavares

Aprende a usar Ant minimamente.

Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Applications. Acho um bom livro, a parte sobre Ant é mais enxuta do que o Ant: The Definitive Guide, que também é um bom livro.

renatosilva

“Hack” é uma coisa feita de qualquer jeito por alguém no fim de semana. O OSGI é consórcio de empresas, e o framework é uma especificação bem feita para suprir essa necessidade que você citou.

O Eclipse Equinox é uma implementação opensource, a mesma usada pelo Eclipse.

Agora estar embutido na JVM lhe fará sentir-se melhor? É um efeito de sugestão, assim como pacientes que alegam ter se curado mas tomaram apenas placebos?

Conclusão: Java já tem isso há 7 anos.

Boa observação, entendi o que quis elucidar, no entanto suponho que OSGi seja uma macumba que fazem com os JARs e a JVM, não? Você tem uma carroça (a JVM) e coloca uma turbina em cima dela (OSGi). Não quer dizer que vai funcionar mal, apenas que é escroto. A JVM tinha que usar uma coisa melhor que JAR, se fosse pra ser OSGi, tudo bem, mas o JCP o rejeitou:

Tá certo que ficar parado esperando aparecer o suporte oficial pra fazer a aplicação que vai rodar hoje à tarde é bobeira, mas mesmo assim não deixa de ser importante. Com o suporte oficial, você não terá como escapar de usar, ao contrário de soluções de terceiros. Poucos conhecem OSGi, eu não conheço (vou tentar entender mais uma vez hoje), a grande maioria usa JAR cru.

Suporte oficial pode significar o fim de Classpath, manifest e arquivos BAT ridículos etc etc., além do fim das gambiarras “em cima da carroça” pra ela funcionar como um disco voador, ou será que fica fácil e simples colocar uma turbina em cima dela?

Thiagosc

renato3110:
Boa observação, entendi o que quis elucidar, no entanto suponho que OSGi seja uma macumba que fazem com os JARs e a JVM, não? Você tem uma carroça (a JVM) e coloca uma turbina em cima dela (OSGi). Não quer dizer que vai funcionar mal, apenas que é escroto. A JVM tinha que usar uma coisa melhor que JAR, se fosse pra ser OSGi, tudo bem, mas o JCP o rejeitou:

Isso cheira mais a política do que coisa técnica. A Sun abriu um JSR e a IBM abriu outra para a mesma coisa com a desculpa de que a Sun não provia detalhes de seu “framework” e nem aceitava idéias de terceiros.

Acho que a Sun está com síndrome NIH (not invented here).

1 - a JVM não é carroça;

2 - OSGi não é gambiarra;

3 - o que o framework faz é similiar ao que o  Global Assembly Cache do .Net faz.

Agora, a ver pela qualidade do Eclipse, eu acho que funciona, você não acha?

Isso é algo bem mais avançado do que várias soluções meia-boca open source que aparecem por aí. E coisa meia-boca é o que não falta.

renatosilva

Thiagosc:

Isso cheira mais a política do que coisa técnica. A Sun abriu um JSR e a IBM abriu outra para a mesma coisa com a desculpa de que a Sun não provia detalhes de seu “framework” e nem aceitava idéias de terceiros.

Acho que a Sun está com síndrome NIH (not invented here).

Bom, apesar de não entender OSGi e o que exatamente o comentário da JSR quer dizer, não acho que seja política. Tá pode ser, mas veja que eles explicaram o porquê da rejeição. Tipo, lendo os comentários, que contra-argumentos poderíamos formular?

1 - Eu falo dos JARs, e a JVM lida com eles
2 - Não me refiro à qualidade, mas cara, colocar uma turbina de F-15 em cima de uma carroça (jars, jars, jars) e fazer ela voar não é gambiarra?
3 - Legal

Não tô falando mal do OSGi e sim dos JARs. Eu acho que o ponto é “JARs são escrotos, a JVM tinha que ter uma coisa melhor”.

Rafael_Steil

Eu nao disse que isso era um hack. A minha frase eh “Via hacks de classloaders OU frameworks a parte”.

Nao apenas fara todo mundo se sentir melhor, como fara a vida de todos muito mais facil. Da maneira voce voce fala, nunca teve problemas relacionados a jar.

Thiagosc:

Conclusão: Java já tem isso há 7 anos.

A sua frase deve ser reescrita assim: “Existem solucoes escritas em Java que fazem / emulam o conceito de versionamento de jars / bibliotecas”.

Rafael

Rafael_Steil

GAC eh apenas um registro central de Assembly - e o versionamento dos Assemblies nem passa por ele, o qual eh suportado pela Runtime.

E outra: usar o Equinox / algo do estilo implica em mudar a forma de desenvolvimento em partes da app, o que pode / sera bem complicado em sistemas ja existentes, assim como “vender” a ideia para a empresa (dependendo de onde voce trabalha - como uma fabrica, por exemplo)

Rafael

Thiagosc

renato3110:
Bom, apesar de não entender OSGi e o que exatamente o comentário da JSR quer dizer, não acho que seja política. Tá pode ser, mas veja que eles explicaram o porquê da rejeição. Tipo, lendo os comentários, que contra-argumentos poderíamos formular?

Segundo a especificação é possível ter classes de versões diferentes e criar dependências de para uma versão ou range de versões específicas:

Dê uma olhada de especificação do R4. Mas eu não trabalhei tanto assim para dar detalhes da vida prática, de coisas que só estão no papel e coisas que realmente funcionam.

Engraçado que a razão dada se refere a R3, não a R4 que está disponível há pelo menos 9 meses.

Criado 26 de julho de 2006
Ultima resposta 27 de jul. de 2006
Respostas 38
Participantes 19