Aula 1 e 2 - Configuração do Projeto

Objetivos

  1. Introdução à ferramenta git
  2. Introdução à ferramenta maven
  3. Introdução ao eclipse
  4. Introdução ao código do projeto

Tarefas

Primeira: Inicializar o projeto no GitHub importando de https://github.com/tecnico-softeng/reference.git
  1. Uma vez criado o repositório do grupo no GitHub é necessário inicializá-lo com o código do projeto. Para isso pode-se usar uma funcionalidade disponibilizada pelo GitHub que permite importar a partir de um outro repositório. 
  2. Na tab <>code da página do repositório escolher a opção import code
  3. Introduzir https://github.com/tecnico-softeng/reference.git e selecionar Begin import
Segunda: Criar um workspace por clone do repositório remoto
  1. Inicialmente é necessário definir a configuração do git na sua máquina para garantir que todas as contribuições que vier a fazer ao projeto lhe sejam creditadas e receba a nota final que deveras lhe corresponde, para isso deve executar git config --global user.name "José dos Anzóis" seguido de git config --global user.email JoseAnzois@tecnico.ulisboa.pt. Este email deve coincidir com o que tem registado no GItHub, Para mais informação pode consultar https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
  2. Deve de seguida criar uma cópia local do repositório remoto com o comando git clone https://github.com/tecnico-softeng/es17CC_GG-project.git onde CC é "al" ou "tg" e GG o número do grupo
  3. Fazendo git status pode ver que o repositório local está no branch master
Terceira: Cada aluno acrescenta o seu número, nome, email, e identificação github ao ficheiro README.md, faz commit e push. Resolver problemas de conflitos. Para uma breve introdução ao Git leia este documento
  1. Abrir o ficheiro README.md do projeto 
  2. Acrescentar uma linha contendo o número, nome, email e identificação do github
  3. Na linha de comando do git fazer git add README.md, para adicionar o ficheiro ao conjunto de ficheiros a ser incluído no próximo commit, é incluído na staging area
  4. Na linha de comando do git fazer git commit -m "group member info added to README.md", para fazer commit local das alterações existentes na área de staging area
  5. Antes de enviar as alterações para o repositório remoto é conveniente garantir que se tem a sua versão mais atual, para isso deve-se fazer git fetch origin
  6. Se o repositório remoto possui alterações que ainda não existem localmente é necessário integrá-las localmente, para isso deve ser feito um merge entre a informação local e a remota executando git merge origin master
  7. No caso de haver conflitos, o que ocorrerá no ficheiro README.md se algum dos colegas já tiver atualizado o repositório remoto, é necessário resolver os conflitos, para isso deve abrir o ficheiro no Eclipse, o icon d ficheiro tem a indicação que possui um conflito, e altera-se o ficheiro para integrar as alterações. Os locais de conflito são indicados por <<<<<<<< HEAD, ========, e >>>>>>>> refs/remotes/origin/master
  8. É necessário voltar a adicionar o ficheiro alterado à staging area fazendo git add README.md
  9. Efetuar um novo commit, git commit -m "conflict resolution", que agora com o ficheiro integrado
  10. E, finalmente, colocar as alterações no repositório remoto, git push origin master
  11. Durante este processo pode-se ir vendo o estado atual com git status
Quarta: Analisar ficheiros pom.xml e executar instruções
  1. O Maven é uma ferramenta para a gestão de um projeto de desenvolvimento de software que automatiza o ciclo de vida do desenvolvimento, desde a compilação do código até à sua colocação em execução. Para uma breve introdução leia este documento.
  2. O ficheiro pom.xml do diretório de topo contém o parent pom.xml que todos os módulos herdam de acordo com uma estrutura de Multiple Module Projects. Assim pode ver no fim do ficheiro a declaração desses 4 módulos. Acima encontra a declaração das dependências que são partilhadas pelos 4 módulos. Cada dependência declara um conjunto de bibliotecas que necessitam de estar disponíveis e que o maven automaticamente descarrega para ~/.m2/repository/, neste caso temos uma biblioteca de testes, JUnit, duas de logging, e uma de classes sobre tempo. Finalmente temos a declaração de um plugin, um plugin de compilação, que declara a utilização da versão 1.8 do Java. Note que este plugin está declarado dentro de <pluginManagement></pluginManagement> o que indica que todos os sub-módulos devem explicitamente indicar a utilização dos plugins, eles não são herdados automaticamente.
  3. Abra agora os ficheiros bank/pom.xml, hotel/pom.xml e activity/pom.xml. Repare que eles são idênticos, todos declaram a utilização no plugin de compilação disponibilizado no módulo parent. A declaração <packaging>jar</packaging> indica que a execução da fase package do módulo irá gerar um ficheiro jar.
  4. Abra o ficheiro broker/pom.xml para ver que ele difere dos anteriores pois inclui dependências para eles. Isto quer dizer que para se compilar este módulo é necessário que os restantes estejam disponíveis em ~/.m2/repository, ou seja, foi necessário anteriormente executar a fase install do ciclo de vida dos restantes módulos 
  5. Para experimentar os comando maven no projeto, execute no diretório parent para ver que a execução ocorre em cada um dos sub-módulos
  6. mvn clean, apaga os diretórios target
  7. mvn compile, compila as classes fonte para target/classes
  8. mvn test, executa os testes de unidade que já se encontram implementados
  9. mvn package, gera o jar do módulo para target/
  10. mvn package -DskipTests, gera o jar do módulo, mas sem executar a fase de test
  11. mvn install, coloca o jar no repositório local ~/.m2/repository/
  12. Ao executar as fase anteriores podem ter acontecido alguns erros no módulo broker. Porquê? Porque é que depois de executar as fases install esses erros deixam de ocorrer, mesmo quando entretanto faz clean dos módulos? Devido a este comportamento, que cuidados deve ter sempre que altera o códigos dos módulos bank, activity ou hotel?
Quinta: Analisar a estrutura de código do projeto usando o eclipse
  1. Lançar o eclipse
  2. Selecionar File seguido de Import
  3. Selecionar Maven seguido de Existing Maven Projects
  4. Escolher o diretório onde está o ficheiro pom.xml de topo
  5. Irão ser abertos 5 projetos eclipse
  6. Existem 4 módulos, que se encontram nos diretórios, broker, bank, activity e hotel
  7. Cada um destas módulos possui um package domain onde se encontra o código inicial do projeto. Explore esse código com base na descrição existente no enunciado geral do projeto. Colocando o rato sobre uma classe e pressionando ctrl pode facilmente navegar entre classes.
  8. Altere a código do método main da classe Application do módulo broker de forma se imprimir as referências de reserva de hotel e de reserva de atividade, ou seja, são efetuadas as reservas. Note que apenas necessita de alterar o código do método main.

Maven

Maven é uma ferramenta que ajuda a fazer a gestão do desenvolvimento de um projecto de software. O seguinte documento Introduction to Maven introduz os conceitos e comandos mais úteis associados a esta ferramenta. Existem diversos guias das funcionalidades desta ferramenta: guia completo, em 5 minutos.

Git

Git é uma ferramenta de gestão de configurações de software e o GitHub é o repositório de projetos Git atualmente mais usado. O seguinte documento GuiaGit introduz os conceitos e comandos mais úteis associados a esta ferramenta. Ferramentas para testar comandos git http://git-school.github.io/visualizing-git/ e https://try.github.io/levels/1/challenges/5. Uma folha de ajuda com os comandos mais comuns https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

Eclipse

Eclipse é um ambiente de desenvolvimento de aplicações que possui uma arquitetura baseada em plugins que lhe confere uma grande extensibilidade, em termos das linguagens suportadas e das ferramentas de suporte ao desenvolvimento de software, como sejam as ferramentas de teste e de verificação de código.