Labs SD >
[IMPORTANTE] Pergunta: Existe alguma restrição sobre a directoria de instalação do software?
Resposta: Sim, infelizmente devido a diversos bugs em ferramentas, o software não funciona corretamente em pastas cujo caminho tenha espaços e/ou caracteres acentuados (sobretudo em Windows). Exemplos de pastas problemáticas:
Dado este problema a sugestão é instalar o software numa pasta sem acentos nem espaços, como C:\java\.
Pergunta: Devem-se instalar exatamente as versões pedidas ou podem ser outras?
Resposta:
Sim, devem procurar instalar as versões pedidas
de forma a terem um ambiente igual (ou o mais parecido possível) com o ambiente de referência (dos laboratórios).
Se não for possível encontrar a versão exata, pode-se instalar a versão mais próxima disponível.
Pergunta: Como confirmar se estou a usar as versões certas das ferramentas?
Resposta: Abrir uma consola e executar os seguintes comandos:
$ java -version $ javac -version $ mvn -versionStart Eclipse, go to "Help" menu, select "About Eclipse"
Pergunta: Na RNL (laboratórios da Alameda), que versões do Java estão disponíveis e como as posso usar?
Resposta: Ver resposta na FAQ da RNL.
Pergunta: Como confirmar se o PATH está correcto?
Resposta: Abrir uma consola Linux e executar
$ echo $PATHAbrir uma consola Windows e executar
$ echo %PATH%
Pergunta: Porque é que o meu Mac não reconhece o endereço localhost?
Resposta:
As seguintes instruções poderão resolver o problema:
http://www.codepotato.co.uk/2012/07/25/enabling-localhost-on-os-x-mountain-lion/
Pergunta: Como posso ler ficheiros (recursos/resources) da aplicação?
Resposta:
Colocar os ficheiros em src/main/resources
(ou em src/test/resources para testes).
Fazer mvn process-resources e
confirmar que ficheiros adicionados são processados e copiados
para a pasta target.
Se se pretender copiar propriedades definidas no Maven
para estes ficheiros é possível usar a opção
filter.
(usando a etiqueta project/build/resources ou
project/build/testResources no pom.xml).
<project ...
...
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
...
Depois de configurado o pom.xml, no código, é possível aceder a um java.io.InputStream para ler os dados binários.
...
InputStream is = this.getClass().getResourceAsStream("/file");
...
Adicionalmente,
a classe java.io.ByteArrayOutputStream pode ajudar a
lidar com dados de tamanho variável.
Pergunta: Como resolver o seguinte problema na compilação:
Exception in thread "main" java.lang.Error: Unresolved compilation problems
Resposta:
As classes foram corrompidas por diferentes compiladores em simultâneo (por ex. Eclipse e Maven).
Para corrigir ir a Eclipse -> Menu 'Project', 'Clean', 'clean all projects". Depois, correr mvn clean.
Pergunta: O meu nome de utilizador tem acentos ou espaços e preciso de mudar a localização do repositório local Maven. Como se faz?
Resposta: O repositório local do Maven é a pasta onde são guardadas todas as dependências obtidas pelo Maven.
Por omissão,
a localização do repositório local é:
~/.m2 (Unix/Mac)
C:\Users\Username\.m2 (Windows)
Para alterar a configuração, editar o ficheiro conf\setting.xml que está na pasta de instalação do Maven (tipicamente apontada pela variável de ambiente M2_HOME).
Não esquecer também de atualizar a configuração do repositório Maven no Eclipse. Aceder a Window - Preferences - Maven - User Settings e indicar a nova configuração.
Pergunta: Como posso consultar o effective POM de um projeto Maven?
Resposta: O effective POM é o resultado da combinação do POM do projeto com os valores das propriedades por omissão. É útil para perceber todas as definições que são assumidas pela ferramenta, como valores de propriedades, por exemplo.
Pode-se consulta através do seguinte comando:
$ mvn help:effective-pom
Pergunta: Existe forma de consultar a árvore de dependências de um projeto Maven?
Resposta: Sim, através do seguinte comando:
$ mvn dependency:tree
Pergunta: Como remover o aviso de character encoding do Maven?
Resposta: Acrescentar a seguinte configuração ao pom.xml:
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
...
Pergunta: Como remover o aviso "Warning: killAfter is now deprecated" do Maven?
Resposta: Para remover este aviso (inofensivo) pode-se acrescentar a seguinte configuração ao pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
...
<configuration>
<killAfter>-1</killAfter>
...
</configuration>
</plugin>
Pergunta: Como definir a versão do Java considerada pelo Maven?
Resposta: Acrescentar a seguinte configuração ao pom.xml:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
...
<configuration>
<source>1.8</source>
<target>1.8</target>
...
</configuration>
</plugin>
Mais informação nesta página.
Pergunta: Qual a diferença entre exec:java e appassembler ?
Resposta: mvn exec:java corre dentro do maven e tem os argumentos definidos no pom.xml com bons valores por omissão (opção preferida para desenvolvimento).
mvn package appassembler:assemble corre de forma autónoma do Maven e necessita que sejam indicados os argumentos (opção preferida para demonstração)
target/bin/appassembler/... .bat arg0 arg1 ...Via Eclipse também se pode correr, depois de compilado, definindo-se os argumentos nas "Run Configurations".
Pergunta: Como se faz a partilha de código através de módulos Maven ?
Resposta:
Para o fazer,
criar um projeto à parte (ex. my-library).
No pom.xml,
definir as coordenadas groupId (ex. example),
artifactId (ex. my-library) e
version (ex. 1.0-SNAPSHOT).
Para disponibilizar o módulo no repositório Maven local (~/.m2), fazer: mvn install.
Para usar o módulo noutro projeto, basta acrescentar a dependência, indicando as coordenadas groupId, artifactId e version tal como se faz em relação a módulos que estão no repositório Maven central (ex. junit, junit, 4.12).
Pergunta: Como executar o programa Java directamente, sem ser através do Maven ou do Eclipse?
Resposta: Caso existam problemas no processamento de entradas e saídas de um programa (o que é comum acontecer com as aplicações de consola que são executadas a partir de outra ferramenta) sugere-se a seguinte solução, que passa por usar o plug-in appassembler para construir ficheiros de lançamento da aplicação, para Windows e Linux.
Pergunta: Como executar o plug-in appassembler de forma automática na fase install?
Resposta: Acrescentar a seguinte configuração ao pom.xml:
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.9</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
Pergunta: É possível ter POMs hierárquicos? Como se usam?
Resposta: O Maven tem dois conceitos hierárquicos: modules e parent.
<project ...>
<!-- the parent relation -->
<parent>
<groupId>example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>module1</artifactId>
<!-- the modules -->
<modules>
<module>submodule1</module>
<module>submodule2</module>
</modules>
</project>
A relação parent indica que configurações de propriedades, repositórios e plug-ins devem ser herdadas do projeto pai.
Um module indica que o subprojeto deve ser incluído no processamento do ciclo de vida do projeto de topo.
Pergunta: Como executar testes de integração (classes terminadas em IT)?
Resposta: Caso não exista ainda, será necessário adicionar a configuração do plug-in para testes de integração:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Pergunta: Consigo compilar e executar os exercícios de código com o Maven no terminal, mas como o faço dentro do Eclipse?
Resposta:
O Eclipse, depois de instalado seguindo o guia, consegue invocar ações de Maven.
Para um projeto Maven no Eclipse, é necessário criar configurações de Maven Build, como é descrito em seguida:
Package Explorer: Right-click no nome do projeto -> Run As -> Run Configurations... -> Maven Build -> New launch configuration
Pergunta: Já segui todas as instruções no guia de software mas mesmo assim o Eclipse não consegue compilar código Java, o que poderá ser o problema?
Resposta:
É possível que, apesar do JDK estar instalado, o Eclipse esteja a apontar para um módulo JRE (Java Runtime Environment), que apenas
permite executar programas Java mas não compilar.
Para resolver esta questão, por exemplo em Windows, é necessário seguir os seguintes passos:
Ir a Window -> Preferences -> Java -> Installed JREs -> Add...
Indicando o diretório do JDK instalado, deve obter o seguinte resultado (ajustando a versão):
Pergunta: Já configurei o Eclipse para usar o JDK mais recente, mas mesmo assim quando importo um projeto Maven, o Eclipse assume que é para usar J2SE5 ou outra qualquer versão estranha, como corrigir isto?
Resposta:
Para assegurar que o projeto Maven funciona como esperado, recomenda-se dar uma indicação explícita da versão de JDK a usar para o projeto.
Para resolver esta questão, é necessário especificar a versão no pom.xml do projeto, inserindo as tags maven.compiler.source e maven.compiler.target aninhadas na tag properties.
Exemplo concreto, aplicado ao pom.xml do projeto hello-ws-cli_juddi:
...
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
...
<build>
...
Pergunta: Quando tento executar o Eclipse este pára com erro 13. Como resolver?
Resposta:
Não vale a pena reinstalar o Eclipse.
Basta editar a PATH e remover C:\ProgramData\Oracle\Java\javapath caso exista, e garantir que o caminho certo é o primeiro na lista de caminhos da PATH.
Se existirem outros caminhos devido a atualizações, estes devem ser removidos.
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Instituto Superior Técnico, Universidade de Lisboa