Coloquei os jar no diretório raiz da aplicação, tentei executar a aplicação, mas reclamou a falta de uma classe que está dentro dos pacotes Jar. Se eu utilizar bibliotecas em pacotes Jar, tenho como obrigação informá-los no CLASSPATH ou na linha de comando java -cp pacote1.jar;pacote2.jar. É isso?
Oi cara, não sei se é isso q ta perguntando, mas por exemplo
eu uso o netbeans, aí eu quero adicionar um jar pra que meu programa utilize as funcionalidades desse jar, eu faço o seguinte, nas propriedades do projeto, na parte de libraries/JARs adiciono o Jar (tipo o do mysqlconnector), aí quando eu mando construir (build) o netbeans copia o jar para a pasta \lib da raiz da pasta de distribuição do projeto. Fica mais ou menos assim.
\dist\meu_programa.jar
\dist\bin\mysqlconnector.jar
Eu criei o jar da seguinte forma
jar -cmf ..\MANIFESTO.MF teste.jar *.*
No diretório raiz se encontrar minha classe que utiliza os pacote1.jar e pacote2.jar
criei uma pasta lib e coloquei todos os pacotes jar utilizados. Quando executo acontece o seguinte erro
[b]Failed to load Main-Class manifest attribute from[/b]
Segue o meu arquivo manifesto
Manifest-Version: 1.0
Class-Path: lib\pacote1.jar lib\pacote2.jar
Main-Class: SimpleFormTest
O que eu fiz de errado?
Resolvi o problema, quando gerava o arquivo Jar utilizando um arquivo de manifesto próprio ele não incluia o atributo Main-Class.
Bom mas agora estou com outro problema quando executo o programa ele não encontra a minha classe principal. Seria o CLASSPATH?
java -jar teste.jar
Exception in thread “main” java.lang.NoClassDefFoundError: SimpleFormTest
Eu a variável de ambiente no Windows “CLASSPATH = .”, mesmo assim ele não encontra a classe.
Quando executo sem empacotar o arquivo Jar funciona, mas tenho que setar o diretorio atual “.” na linha de comando
java -cp .;lib\pacote1.jar;lib\pacote2.jar SimpleFormTest.
Eu adicionei o “.” no class-path do manifest mas não funcionou. Quando executo o arquivo Jar
java -jar teste.jar
aparece o seguinte erro
Exception in thread "main" java.lang.NoClassDefFoundError: SimpleFormTest
Meu arquivo manifesto
Manifest-Version: 1.0
Class-Path: lib\pacote1.jar lib\pacote2.jar
Created-By: 1.6.0_03 (Sun Microsystems Inc.)
Main-Class: SimpleFormTest
O problema que ele não está encontrando a classe no diretório atual.
Alguém tem uma solução.
Resolvi o problema da seguinte forma:
A classe SimpleFormTest possuia o método main dentro dele eu criava a classe e dessa forma empacotada não funcionava.
public class SimpleFormTest extends JFrame {
public static void main(String[] args) {
SimpleFormTest form = new SimpleFormTest();
form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form.setVisible(true);
}
}
Criei outra classe com o método main e renomeia a anterior, ficando da seguinte forma.
public class SimpleFormPrinc extends JFrame {
}
public class SimpleFormTest {
public static void main(String[] args) {
SimpleFormPrinc form = new SimpleFormPrinc();
form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form.setVisible(true);
}
}