# Anatomia de um projeto

> Módulos Gradle, como o MainWindow é resolvido por classname e onde ficam assets.

Source: https://crossfly.dev/pt/docs/get-started/project-structure — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Anatomia de um projeto

Entenda o que gerou o "esqueleto" antes de mexer nele.

## Os módulos Gradle
```
:core     → código compartilhado: suas Windows, componentes, lógica, dados
:lwjgl3   → launcher desktop
:android  → launcher Android
:ios      → launcher iOS (RoboVM)
:web      → launcher Web (TeaVM)
```
Você programa **quase sempre no `core`**. Cada launcher só faz o *bootstrap* do SO — instancia o `Main`
e configura a janela (ver [plataformas](/docs/platforms)).

## Como o `MainWindow` é resolvido
O `Main` instancia a janela principal **por reflexão**:
1. usa a classe indicada em **`cmdline["classname"]`** (passada pelo launcher); ou
2. na ausência dela, o **`getMainWindow()`** sobrescrito.

Exigência: a classe precisa de um **construtor público sem argumentos** (é instanciada por reflexão).

## Exemplo completo (copiar, colar e rodar)
Classe `MainWindow` mínima e executável, com o construtor sem-args exigido pela reflexão:
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class MainWindow extends Window
{
   public MainWindow() { }          // construtor sem-args (obrigatório para a reflexão)

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, new Label("MainWindow resolvida por classname"));
   }
}
```

## Organização de app sugerida
Dentro do `core`, uma estrutura que escala (ver [arquitetura de app](/docs/best-practices/arquitetura-de-app)):
```
app/
 ├─ ui/screens/      → suas Windows (uma tela = uma Window)
 ├─ ui/components/   → componentes reutilizáveis
 ├─ data/            → repositórios (SQLite, rede)
 └─ model/           → objetos de domínio
```

## Assets e fontes
As fontes base (Roboto, FontAwesome, Material) são carregadas no bootstrap; seus assets (imagens,
dados) ficam no diretório de assets do projeto e são lidos por caminho (ver
[Imagens](/docs/ui/images-and-graphics/images)).

## Próximos passos
→ [Tour panorâmico do CrossFly](/docs/get-started/tour)

## Veja também
- Conceito: [O ciclo de vida](/docs/concepts/lifecycle) · [A arquitetura em camadas](/docs/concepts/architecture)
