Problema ao usar javac

5 respostas
ECO2004

Alguém poderia me ajudar a compilar o meu programa?

Eu criei em meu desktop uma pasta chamada Teste. Dentro desta pasta, criei mais duas chamadas ClasseA e ClasseB.
Dentro da pasta (diretório) ClasseA, criei um arquivo ClasseA.java. Na pasta ClasseB, criei um arquivo ClasseB.java.

A hierarquia é mostrada abaixo:

desktop
   Teste
      ClasseA
         ClasseA.java
      ClasseB
         ClasseB.java

Os códigos...

package Teste.ClasseA;

import Teste.ClasseB.*;

public class ClasseA
{
	public static void main(String []args)
	{
		ClasseB objb = new ClasseB();
	}
}
package Teste.ClasseB;

public class ClasseB
{
	ClasseB(){}

	public void imprime()
	{
		System.out.printf("%s\n", "Na classe B");
	}
}

Compilo ClasseB normalmente.

No console, dentro do diretório desktop/ClasseA, tento compilar ClasseA.java com o javac. Gera erro dizendo "package Teste.ClasseB" does not exist.

Como posso corrigir esse problema sem ter que mudar as classes de pasta? Desejo as classes em pastas diferentes.

5 Respostas

E

Evite criar pacotes com letras maiúsculas e com nomes que são iguais aos nomes de classes.

Isso está lhe confundindo horrores.

Lembre-se, Java não é .NET, não se deve incluir classes com “*”.

De qualquer maneira, existe a opção do javac chamada “-classpath”, que serve para indicar diretórios que devem ser varridos para checar arquivos .class que devem ser pesquisados durante a compilação de uma classe, e a opção -sourcepath para indicar de onde devemos pegar os arquivos-fontes.

Digite “javac” em uma linha de comando e veja as opções possíveis. Um exemplo:

C:\>c:\jdk1.6.0\bin\javac
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are used
  -classpath <path>          Specify where to find user class files and annotation processors
  -cp <path>                 Specify where to find user class files and annotation processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compilation is done.
  -processor <class1>[,<class2>,<class3>...]Names of the annotation processors to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>             Specify where to place generated class files
  -s <directory>             Specify where to place generated source files
  -implicit:{none,class}     Specify whether or not to generate class files for implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>          Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system
marcelo.silva.java

ow…seu construtor da classe B deve ser publico…

ECO2004

Na verdade, o que eu estou fazendo é testando o qualificador de acesso padrão (package). Com construtor sem qualificador de acesso explícito, este é o default. Assim, uma classe em outro pacote não conseguiria criar um objeto dessa classe.

Com relação aos import, estão corretos?

E

Eu sempre costumo indicar a seguinte divisão de diretórios, que casualmente é semelhante ao que o Eclipse monta:

Diretorio_Do_Seu_Projeto
	src
		pacote1
			subpacote1
				Classe1.java
		pacote2
			subpacote2
				Classe2.java
	bin
		pacote1
			subpacote1
				Classe1.class
			subpacote2
				Classe2.class
	lib
		biblioteca1.jar
		biblioteca2.jar

Para compilar algo:
javac -cp bin;lib\biblioteca1.jar;lib\biblioteca2.jar -sourcepath src -d bin src\pacote1\subpacote1*.java src\pacote2\subpacote2*.java

É por isso que eu prefiro usar uma IDE qualquer como o Eclipse. Haja paciência para especificar os arquivos de entrada :slight_smile:

ECO2004

Também somente uso IDE…usei javac e notepad somente no começo da faculdade. Nem lembrava mais do classpath.

Valeu!

Criado 16 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 5
Participantes 3