Compilando...Duvida fácil. [ Resolvido ]

Galera estou com uma dúvida muito básica.

Tenho uma aplicaçãozinha um pouco complexa.
Ela está divida em vários pacotes. E esses pacotes são mutuamente dependentes.
Como faço para compilar utilizando o “javac” todos os pacotes simultaneamente.
Pois se eu tento compilar pacote por pacote não da certo por causa das dependências.

No eclipse isso é trivial, porém como é um trabalho, preciso entregar apenas os .java
e o professor deve ser capaz de compilar tudo com um unico comando.

Me ajudem!!!

Normalmente eu enviaria um script (batch) com vários comandos “javac” e colocaria todos os pacotes no mesmo comando. Obviamente iria mandar um arquivo script (ou batch) contendo o comando correto para a compilação. Não se esqueça de testar antes, e em uma máquina “limpa” e diferente da sua também.

Algo como:

javac -d bin -sourcepath src br\com\teste*.java br\com\teste2*.java

Leia as opções do comando “javac” (basta digitar javac. Ele irá mostrar algo como:

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 u
sed
  -classpath <path>          Specify where to find user class files and annotati
on processors
  -cp <path>                 Specify where to find user class files and annotati
on 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 compil
ation is done.
  -processor <class1>[,<class2>,<class3>...]Names of the annotation processors t
o 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

teoricamente, ele deve apenas compilar a classe main, que é o ponto inicial do seu programa, os .java não são compilados diretamente, são intepretados para um .class e então compilados. Outra alternativa seria transformar tudo em um .jar.

Carinha, não conheço forma de se compilar todos os fontes de um diretório src de uma só vez com um simples javac, algo como um javac -sourcepath src *.
Porque você não monta um script Ant? :lol:

Valew galera…

Então Thiagol eu estou pensando em fazer extamente isso mesmo, porém, eu tenho um problema, o pacote “a” tem uma referencia de uma classe do pacote “b” e vice-versa. Então eu nao posso mandar compilar o pacote “a” inteiro de uma vez. (Ou eu estou fazendo besteira). Sua ideia daria certo se eu compilasse .java por .java.

Fnandos sua idéia nao da certo. Isso apenas funciona se tudo estivesse dentro de um mesmo pacote. Criar um jar seria uma solução, mas eu estou querendo fugir dessa, como expliquei a cima, o professor quer analisar todos os pacotes antes de compilar.

TangZero vc sabe um exemplo fácil de script Ant? Nunca usei Ant… seria como uma Makefile???

Abração galera e muito obrigado mesmo!

Se você fizer do jeito que indiquei, o javac se vira para manter as dependências. É trabalhoso, mas deve funcionar.

Parecido com um Makefile? Talvez, só que é 1000x mais poderoso.

Tutorial:
http://www.guj.com.br/java.tutorial.artigo.30.1.guj

Exemplo de Script Ant.

<?xml version="1.0" encoding="iso-8859-1" ?>
<project name="helloworld" default="main" basedir=".">

	<property name="src" value="src" />
	<property name="build" value="classes" />

	<target name="main" depends="compile">
	    <echo>Iniciando Script Ant.</echo>    
	</target>

	<target name="compile" depends="clean, init">
	    <echo>Compilando o projeto.</echo>
	    <javac srcdir="${src}" destdir="${build}"/>
	</target>

	<target name="clean">
		<echo>Limpando o projeto.</echo>
		<delete dir="${build}" />	
	</target>

	<target name="init">
	    <echo>Preparando a compilacao.</echo>
	    <mkdir dir="${build}" />    
	</target>

</project>

Qualquer dúvidas, estamos ai… :wink:

Mais uma vez muito obrigado galera…

Usei sua sugestão Thiagol… deu certo.

TangZero sempre soube da existência do Ant só que sempre achei que nao compensava o crime ( estudar uma linguagem só usada pra compilar…), mas pelo visto ela é bem mais útil do que eu imaginava… vou dar uma olhada com mais calma nela agora…

Abração!

Aconselho realmente, que você procure aprender Ant, pois é uma ferramenta extremamente versátil e flexível. :lol: