Skip to content
Pedro Felix edited this page Feb 16, 2019 · 4 revisions

Ambiente de trabalho

Conteúdo

  1. Requisitos
  2. Localizações
  3. Git
  4. Gradle
  5. IntelliJ
  6. Organização de pastas e ficheiros
  7. Pasta raiz
  8. Pasta "src/"
  9. Pasta "build/"
  10. Pasta "vendor/"

Requisitos

Localizações

Git

Os sistemas de controlo de versões, tal como o Git, têm por objectivo:

  • Servir de ponto de armazenamento para os ficheiros produzidos em múltiplos computadores.
  • Manter o historial de criação, alteração e remoção destes ficheiros.

Adicionalmente, os sistemas de controlo de versão distribuídos, tais como o Git têm como vantagem adicional:

  • Suportar diferentes pontos de armazenamento
  • Não existir um ponto único de falha
  • Funcionar sem rede

As vantagens da utilização destes sistemas são:

  • Simplificar a realização de projectos por múltiplos programadores, por exemplo garantido que a versão dos ficheiros utilizada é a mais actual.
  • Manter todo o historial da evolução do projecto.
  • Criar e gerir ramos de desenvolvimento paralelo.

Os conceitos fundamentais do Git são:

  • Os repositórios - pontos onde são armazenados os ficheiros e o seu historial. Estes repositórios são geridos pelo Git e estão tipicamente associados a um URL.
  • O repositório local, na máquina do utilizador, e o(s) repositório(s) remoto(s) para partilha de ficheiros entre utilizadores
  • As cópias locais de ficheiros, localizadas no computadores de desenvolvimento, onde os ficheiros são criados e editados. A gestão destas cópias locais e a comunicação com o repositório é realizada por aplicações designadas de clientes Git.
  • O conjunto de comandos para transferência e sincronização de informação entre o repositório e as cópias locais.

Os comandos fundamentais do Git são:

  • clone - criação dum repositório local a partir de repositório remoto. Nesta operação é necessário indicar o URL do repositório remoto e a localização, no sistema de ficheiros local, onde é colocado o repositório local. Note que o repositório local é completamente funcional para execução de comandos Git.
  • add - Adiciona ficheiros editados a índice .
  • commit - actualização do repositório local com a informação que está no índice.
  • push - actualiza um repositório remoto com o estado do repositório local.
  • pull - actualiza o repositório local com o estado do repositório remoto.

Aconselha-se a leitura do livro Pro Git, nomeadamente os dois primeiros capítulos.

Gradle

O Gradle é uma ferramenta para a automatização dos processos associados à construção de software, tais como: compilação, execução de testes, criação de arquivos ".jar" e a geração de documentação a partir dos ficheiros fonte. Esta ferramenta é constituída por uma biblioteca Java e um script a para execução na linha de comando ("gradlew.bat").

As tarefas automatizadas pelo Gradle são descritas em ficheiros .gradle, designados de configuration scripts, e tipicamente com o nome "build.gradle".

A utilização do Gradle, ou de ferramentas similares, apresenta as seguintes vantagens:

  • Simplificação da realização das tarefas, como a compilação ou a execução dos testes, através da automatização da sua realização. Este aspecto é especialmente importante em tarefas que envolvem a execução de mais do que um comando por uma ordem bem definida.
  • Consistência de processos e redução de erros, ao minimizar a intervenção humana na realização da tarefa.
  • Integração com ferramentas externas, como por exemplo em cenários de integração contínua.
  • Simplificação da geração da aplicação em múltiplos computadores, nomeadamente diferentes daqueles onde é desenvolvida.
  • No contexto da unidade curricular de Laboratório de Software, é requisito que o projecto desenvolvido seja completamente construído, instalado e testado através da execução de tasks Gradle.

Organização de pastas e ficheiros

Propõem-se a utilização duma organização normalizada para os ficheiros e pastas do projecto. A adopção desta organização normalizada reflecte boas práticas no desenvolvimento de projectos software (e.g. Maven) e tem por objectivo:

  • Facilitar a compreensão e localização dos ficheiros produzidos, por parte de discentes e docentes.
  • Simplificar a automatização de tarefas, como a compilação, geração da documentação ou a produção de arquivos ".jar".
  • Permitir a mobilidade das pastas de projecto entre máquinas diferentes.

Pasta raiz

A pasta raiz apenas contém o ficheiro "build.gradle", com a descrição das tarefas ("tasks") associados à construção do artefactos associados ao projecto. O restante conteúdo do projecto está presente em pastas internas.

Pasta "src/"

A pasta "src/" contém todos os ficheiros com ficheiros "fonte", ou seja, ficheiros criados pela equipa de desenvolvimento. Esta pasta divide-se nas pastas:

  • "src/main/" com os ficheiros contendo as funcionalidades implementadas no projecto;
  • "src/test/" com os ficheiros para o teste do projecto.

Cada uma destas pastas subdivide-se nas seguintes pastas:

  • ".../java" com os ficheiros fonte Java
  • ".../sql" com ficheiros contendo scripts SQL

A estrutura interna das pastas ".../java" corresponde à estrutura de "packages" adoptada.

Pasta "build/"

A pasta "build/" contém todos os ficheiros produzidos de forma automática a partir dos ficheiros fonte, nomeadamente: ficheiros ".class" e ".jar" com as classes Java; ficheiros ".html" com a documentação produzida pelo JavaDoc.

Pasta "vendor/"

A pasta "vendor/" contém ficheiros adicionais, não produzidos pela equipa de desenvolvimento nem gerados a partir destes. São exemplo os ficheiros ".jar" com bibliotecas de classes externas, presentes na pasta interna "vendor/main" e "vendor/lib" (e.g. junit-4.8.1.jar).