Aula 1 e 2 - Configuração do Projeto
Objetivos
- Introdução à ferramenta git
- Introdução à ferramenta maven
- Introdução ao eclipse
- Introdução ao código do projeto
Tarefas
Primeira: Inicializar o projeto no GitHub importando de https://github.com/tecnico-softeng/reference.git
- 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.
- Na tab <>code da página do repositório escolher a opção import code
- Introduzir https://github.com/tecnico-softeng/reference.git e selecionar Begin import
Segunda: Criar um
workspace por
clone do repositório remoto
- 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
- 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
- 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- Abrir o ficheiro README.md do projeto
- Acrescentar uma linha contendo o número, nome, email e identificação do github
- 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
- 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
- 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
- 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
- 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
- É necessário voltar a adicionar o ficheiro alterado à staging area fazendo git add README.md
- Efetuar um novo commit, git commit -m "conflict resolution", que agora com o ficheiro integrado
- E, finalmente, colocar as alterações no repositório remoto, git push origin master
- Durante este processo pode-se ir vendo o estado atual com git status
Quarta: Analisar ficheiros pom.xml e executar instruções
- 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.
- 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.
- 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.
- 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
- 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
- mvn clean, apaga os diretórios target
- mvn compile, compila as classes fonte para target/classes
- mvn test, executa os testes de unidade que já se encontram implementados
- mvn package, gera o jar do módulo para target/
- mvn package -DskipTests, gera o jar do módulo, mas sem executar a fase de test
- mvn install, coloca o jar no repositório local ~/.m2/repository/
- 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
- Lançar o eclipse
- Selecionar File seguido de Import
- Selecionar Maven seguido de Existing Maven Projects
- Escolher o diretório onde está o ficheiro pom.xml de topo
- Irão ser abertos 5 projetos eclipse
- Existem 4 módulos, que se encontram nos diretórios, broker, bank, activity e hotel
- 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.
- 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.pdfEclipse
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.