É possível pelo prompt?

5 respostas
A

Estou com uma certa dificuldade, mas antes passarei todas as especificações e configurações atuais feitas no meu pc.

VARIAVEL JAVA_HOME:
VALOR DA VARIAVEL: C:\Arquivos de programas\Java\jdk1.6.0_01

VARIAVEL .CLASSPATH
VALOR DA VARIAVEL: C:\Arquivos de programas\Java\jdk1.6.0_01\lib;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_HOME%\lib\jsp-api.jar;C:\aplicacao;

VARIAVEL CATALINA_HOME
VALOR DA VARIAVEL: C:\Arquivos de programas\Apache Software Foundation\Tomcat 6.0

NÃO ESTOU USANDO IDE eclipse ou netbeans, estou usando o prompt de comando do windows xp.

Chamo a atenção para uma simples implementação usando quatro classes estudadas na apostila do Caelum:
Conexao.java, Contato.java, ContatoDao.java e TestaInsere.java

1)Como podem ver em classpath está C:\aplicacao. É neste diretório que defino os PACOTES.
2)Criei três DIETORIOS distintos

C:
aplicacao
fabrica
dao
contato

3)Criei três pacotes distintos
aplicacao.fabrica
aplicacao.dao
aplicacao.contato

4)Vejam os códigos das classes
4.1 A classe do pacote aplicacao.fabrica

package aplicacao.fabrica;
import java.sql.*;
public class Conexao {
public Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:mysql://localhost/principal","root","pass");
} catch(SQLException e) {
throw new RuntimeException(e);
}
}
}
4.2 A classe do pacote aplicacao.contato
package aplicacao.contato;
import java.io.*;   
public class Contato {
private String nome;
private String email;
private String endereco;

// métodos get e set para nome, email, endereço
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return this.endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}

}
4.3 A classe do pacote aplicacao.dao
package aplicacao.dao;
import aplicacao.fabrica.*;
import aplicacao.contato.*;
import java.sql.*;
public class ContatoDao{
private Connection connection;
public ContatoDao() {
this.connection = new Conexao().getConnection();
}

public void adiciona(Contato contato) {
String sql = "insert into contatos (nome,email,endereco) values (?,?,?)";
try {
// prepared statement para inserção
PreparedStatement stmt = connection.prepareStatement(sql);
// seta os valores
stmt.setString(1,contato.getNome());
stmt.setString(2,contato.getEmail());
stmt.setString(3,contato.getEndereco());

// executa
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

4.4Classe de teste de inserção de dados em um banco MySql

import aplicacao.fabrica.*;   
import aplicacao.contato.*;
import aplicacao.dao.*;
import java.sql.*;  
public class TestaInsere{
public static void main(String[] args) {
Contato contato = new Contato();
contato.setNome("Alan");
contato.setEmail("[email removido]");
contato.setEndereco("R. Alto Alegre");
TestaInsere bd = new TestaInsere();
bd.adiciona(contato);
System.out.println("Gravado!");
}
}
5)OBJETIVO:

Quero poder compilar a classe ContatoDao.java dentro do diretório c:\aplicacao\dao, e a classe TestaInsere.java de um diretório  em outra PARTIÇÃO d:, por exemplo, as três classes dos pacotes estão dentro de:

C:\aplicacao\fabrica\Conexao.java (Conexao.class)

C:\aplicacao\contato\Contato.java (Contato.class)

C:\aplicacao\dao\ContatoDao.java (ContatoDao.class)
E a classe TestaInsere.java está em:

D:\TestaInsere.java

6)ERROS:
6.1 Vou no prompt e entro na partição c:\aplicacao\dao
Dou o comando javac ContatoDao.java
erros:
packcage aplicacao.fabrica does not exist
packcage aplicacao.contato does not exist

6.2 Vou no prompt e entro na partição d:
Dou o comando simples javac TestaInsere.java
erros:
packcage aplicacao.fabrica does not exist
packcage aplicacao.contato does not exist
packcage aplicacao.dao does not exist

Ou seja, não consigo fazer no ato de compilação das classes ContatoDao.java e TestaInsere.java, que estas enxeguem os pacotes distintos citados acima, que estão dentro do diretório setado no classpath (C:\aplicacao)

7)IDE
Sei que no eclipse e netbeans tudo isso fica mais fácil, mas para saber como tudo fuinciona realmente é necessário usa o pompt algumas vezes, e por questões de CONCUSOS, é necessário o conhecimento. Portanto, como faço para compilar uma classe em um diretório de partição diferente, quando esta faz imports de vários packcages em outra partição?

5 Respostas

Andre_Brito

Você pode especificar o classpath pra compilação usando as flags cp e classpath.

Seria algo do tipo

javac -cp pathDaLib Classe.java

onde Classe.java é a sua classe e pathDaLib é o diretório das libs.

Mais informações aqui: http://www.guj.com.br/java/61184-com-usar-javac---classpath

S

Olá,

6)ERROS:
6.1 Vou no prompt e entro na partição c:\aplicacao\dao
Dou o comando javac ContatoDao.java

tende dessa forma:

javac …\fabrica\Conexao.java …\contato\Contato.java ContatoDao.java

A

seliaj:
Olá,

6)ERROS:
6.1 Vou no prompt e entro na partição c:\aplicacao\dao
Dou o comando javac ContatoDao.java

tende dessa forma:

javac …\fabrica\Conexao.java …\contato\Contato.java ContatoDao.java

segui todas as dicas, e experimentei a tua dica. A classe ContatoDao.java funcionou pefeitamente. A partir daí fui tentar executar a classe TestaInsere.java em outra partição
Na partição d: fiz:

D:>javac c:\aplicacao\fabrica\Conexao.java c:\aplicacao\contato\Contato.java c:
\aplicacao\dao\ContatoDao.java TestaInsere.java

As três primeiras classes compilaram bem, contudo a classe TestaInsere.java deu um ERRO no metodo bd.adiciona(contato)

TestaInsere.java:12: cannot find symbol

symbol : method adiciona(aplicacao.contato.Contato)

location: class TestaInsere

bd.adiciona(contato);

1 error

tentei até mesmo na mesma partição c:, também dentro de c:\aplicacao, seguindo as dicas, mas o erro persistiu
O interessante é que já testei essas quatro classes fazendo algumas heanças e tudo ocorre bem sem erros.

Não entendi porque do erro neste metodo

S

Olá,

o seguinte vai da erro mesmo, pois o que dá para notar e que “db” é um objeto da classe TestaInsere.

e o metodo que você está chamando e de um objeto da classe ContatoDao.

acho que se você corrigir, bem provavél que não apresente mais erros.

At+

Jailes

A

seliaj:
Olá,

o seguinte vai da erro mesmo, pois o que dá para notar e que “db” é um objeto da classe TestaInsere.

e o metodo que você está chamando e de um objeto da classe ContatoDao.

acho que se você corrigir, bem provavél que não apresente mais erros.

At+

Jailes


Vou dá uma olhada melhor
Me baseio na apostila FJ-21
Java para Desenvolvimento Web, páginas 6-17

Criado 19 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 5
Participantes 3