Bem, você está querendo resolver um problema de referência circular, mas quer que desconsideremos o problema de referência circular? Isso sim é problema de referência circular.
Bem, tirando as piadas:
Cara, com isso você está simplesmente jogando a sujeira pra debaixo do tapete. Se você tem referências circulares, eu acredito fortemente que você deva refatorar o seu código e retirar isso. Eu acho muito difícil você realmente precisar disso na maneira que você está fazendo.
Cara, não tem como. A compilação é um processo linear, portanto, as dependências sempre devem ocorrer em árvore, caso contrário, é um problema de ovo/galinha.
O que acontece no Eclipse é que, por default, ele vai compilando conforme você vai desenvolvendo. O que deve ter acontecido é que você deve ter começado a desenvolver o Projeto1, criou o Projeto2 e estabeleceu a dependência circular. Veja que mesmo nesse caso, as coisas aconteceram de maneira linear.
Bom pessoal, como eu tentei deixar claro no post inicial estou a busca de uma solução para compilação da referência circular e não na solução da referência circular em si. Então, respostas do tipo “referência circular é erro, corrija isso!” não me ajudam muito.
Minha intenção é entender como o Eclipse faz essa mágica por trás dos panos e fazer o mesmo através de scripts Ant.
Camarada, as duas respostas anteriores dizem isto.
Basicamente, o Eclipse vai “andando” e, quando encontra algo compilável, compila.
Se esse algo compilável é uma referência, por exemplo, à um outro projeto, ele irá verificar se o mesmo foi compilado.
Caso não tenha sido, ele para a compilação atual, vai até o segundo projeto e começa a compilá-lo.
Segue o fluxo até encontrar outra referência ou o final do projeto.
O problema é que nesse tipo de referência, começa a compilação do projeto1, encontra a referência ao projeto2, para a compilação do projeto1, vai até o projeto2, acha a referência ao projeto1, para a compilação do projeto2, tenta compilar o projeto1 e fica nisso.