Dúvidas sobre JAR

Pessoal, 3 dúvidas: o resultado do JAR é apenas 1 arquivo (.jar) criado ou algum outro arq deveria tb ser criado? Além das classes meu projeto tem pastas com CSS, imagens e arquivos TXT. O JAR tb deve incorporar estas pastas tb? Como? Caso contrário, se o JAR tratar apenas as classes, qual a prática comum em lidar com os demais componentes (imagens, arqs) quando se pretende instalar o projeto (desktop) em um outro PC? Última pergunta: o arq JAR pode ser executado no windows 7 apenas clicando nele? Grato.

até onde eu sei um Jar incorpora tudo que está no projeto.

no windows 7 ou em qualquer windows ou linux ou mac (tendo o java instalado) esse jar vai ser executado apenas clicando 2 veses

blayd2015, grato pela resposta. O JAR é uma mera compactação? Eu preciso necessariamente usar o comando JAR q vem junto com o Java ou eu poderia usar o WZip ou RAR? O resultado seria o mesmo? Abcs.

O JAR é uma forma para agrupar os arquivos da aplicação.

Vc poderia usar WZip ou RAR, mas não há garantias de que o resultado seja o mesmo, pois além das classes e arquivos da aplicação, também são incluídos arquivos de inicialização e configuração da aplicação. Se vc souber criar esses arquivos, então o resultado poderia ser o mesmo.

No JDK contém bibliotecas para ler e escrever arquivos, vc pode colocar os arquivos em qualquer lugar, como qualquer outra aplicação.

Sim, desde que o java esteja corretamente configurado. Quando o JDK ou JRE é instalado, automaticamente é feita essa configuração.

diego12, grato pela resposta. Estou com 2 problemas:

  1. Consegui criar o Arq.jar só com as classes e o manifest. Não consegui incluir as pastas que contém
    imagens e arquivos txt necessarios ao projeto. Usei o seguinte comando do JAR no prompt:

    jar -cvfm Arq.jar manifest.txt c:\java\classes\pack1*.class
    Este pegou todas as classes e o manifest, porém não pegou as pastas.

jar -cvfm Arq.jar manifest.txt c:\java\classes\pack1*.*
Mesmo resultado. Só classes e manifesto

Outro ponto: Tentei rodar o JAR mas nada ocorre. Vi a qual aplicativo a extensão JAR estava atribuida e estava
atribuida ao Java. Para testar, vi q na pasta de instação do JAVA existiam varios aplicativos (java, javaw, javaws, etc).
Mudei a atribuição para todos, mas o aplicativo não carrega.

qual IDE de desenvolvimento vc está usando??
pq vc tá usando o prompt?

blayd2015, estou usando o prompt apenas para fixar as instruções do Java (amarração dos threads, etc). Em
breve começarei a usar um IDE.

Mas, o 1o problema (o JAR não pegar as pastas de imagens, arqs, etc) eu consegui resolver. Bastou não
usar o . no final e sim terminar no …\pack1\

Mas o problema da execução continua. Vc acha q eu preciso usar um JARFix?

Procure o manifest dentro do JAR (meta-inf/manifest.mf), abra com editor de texto e verifique se contém a propriedade Main-Class

Main-Class: aplicacao.ClasseComMain

O valor da propriedade deve ser a classe que contém o método main.


Se as imagens estão dentro de pack1 ou subdiretórios, tente:

jar -cvfm Arq.jar manifest.txt c:\java\classes\pack1

se não der certo, adicione com a extensão dos arquivos:

c:\java\classes\pack1\*.png

diego12, grato pela resposta. Olhei o manifest (sufixo mf) e tem a Main-Class com a classe principal (q tem o
método start. A classe é JFX, por isso é start no lugar do main).
O importante é q já resolvi a questão do JAR pegar tudo, inclusive pastas, imagens e arqs, como comentei
no post anterior.
O problema q tenho agora é em executar o JAR. Ele simplesmente não roda. Olhei e o sufixo JAR e está
relacionada a um aplicativo Java.
Você consegue me ajudar nisso? Grato.

Se não me engano, é Main-Class também para o JavaFX. No método main deve chamar launch:

public static void main(String[] args) {
    launch(args);
}

http://docs.oracle.com/javafx/2/get_started/hello_world.htm

diego12, desculpe-me pela demora. Segui sua sugestão e incluí o método main, como segue:
identar texto pre-formatado em 4 espaços
public class ClsConAvi extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage)
{
// código

}

Esse é o manifest.mf que está dentro do JAR:

Manifest-Version: 1.0
Created-By: 1.8.0_131 (Oracle Corporation)
Main-Class: ClsConAvi

O JAR está com o Path (java/classes/pack1/ e dentro do pack1 estão todas as pastas
com arqs, imagens, etc. Também estão todas as classes do projeto.

Porém o JAR continua não rodando. Tentei rodá-lo com os seguintes executáveis JAVA:

  • JAVA™ Platform SE binary (existem 4 executáveis com este nome. Tentei os 4);
  • JAVA™ Web Launcher;
  • JAVA™ Web Start Launcher

Será que você consegue detectar o que está errado? Grato.Texto pré-formatado

Tente rodar no prompt, verifique se aparece uma mensagem de erro.

diego12, rodei no prompt com o comando java -jar ClsConAvi.jar e dá o seguinte erro:

C:\java\classes\pack1>java -jar ClsConAvi.jar
Erro: Não foi possível localizar nem carregar a classe principal ClsConAvi

O Arquivo ClsConAvi.JAR está no path C:/java/classes/pack1. Neste mesmo path estão todas as
classes do projeto, inclusive a própia ClsConAci.class. Estão tb as pastas com imagens, arqs, etc.

Tentei rodar em outros diretórios (c:java/, c:java/classes/) e a msg é:
C:\java>java -jar ClsConAvi.jar
Error: Unable to access jarfile ClsConAvi.jar

O q vc acha? Grato.

Sugestão, compile seu programa usando um IDE e depois compare o manifest gerado com o que vc fez, provavelmente falta alguma configuração.

diego12, ok. Grato. Vou fazer isso. Abcs.