Pergunta:[IMPORTANTE] 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 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,
podem instalar a versão mais próxima disponível.
Existem riscos em ter diferenças mas,
na maior parte dos casos, não deverão ser impeditivos da realização do projeto.
Em todo o caso, ao testar os exemplos das aulas será possível detetar se há ou não diferenças relevantes.
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: 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 na seguinte página: http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
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 a definição (definida no pom pai, por exemplo) 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:
Ao executar o Maven no Ubuntu dá-me o seguinte erro:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building java-app 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/codehaus/mojo/exec-maven-plugin/1.4.0/exec-maven-plugin-1.4.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.629 s
[INFO] Finished at: 2016-02-24T11:30:56+00:00
[INFO] Final Memory:8M/110M
[INFO] ------------------------------------------------------------------------
[ERROR] Plugin org.codehaus.mojo:exec-maven-plugin:1.4.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.codehaus.mojo:exec-maven-plugin:jar:1.4.0: Could not transfer artifact org.codehaus.mojo:exec-maven-plugin:pom:1.4.0 from/to central (https://repo.maven.apache.org/maven2): java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
Como resolvo este problema?
Resposta:
Executando o seguinte comando na shell:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
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 (seguindo o guia deverá chamar-se jdk1.8.0_72), deve obter o seguinte resultado:
Pergunta:
Erro: Failed to execute goal org.codehaus.mojo:jaxws-maven-plugin:2.4.1:wsimport
java.lang.NoClassDefFoundError: com/sun/tools/xjc/api/ErrorListener
Resposta:
Provavelmente deve-se ao Eclipse estar a apontar para um módulo JRE (Java Runtime Environment) e não para um JDK (Java Developer Kit).
Configurar o JDK (ver resposta mais detalhada acima).
Pergunta: Já configurei o Eclipse para usar o JDK 8, 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.
Pergunta: No Eclipse, quando tento compilar o projeto via Maven, obtenho o seguinte erro (por exemplo, no transporter-ws):
[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport (default) on project transporter-ws: Execution default of goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.3:wsimport failed: String index out of range: -1 -> [Help 1]Como faço para resolver este erro?
Resposta:
Poderá ser necessário atualizar a configuração do Maven dentro do Eclipse:
Ir a Window -> Preferences -> Maven -> Installations, escolher a instalação com
NAME com o valor "EMBEDDED"
(possivelmente já estará com este valor) e depois escolher a
instalação local (poderá ser necessário carregar em Add... e indicar
o diretório da instalação do Maven conforme os passos executados no guia de software)
Pergunta:
Ao tentar lançar o jUDDI+Tomcat, obtenho um erro:
BASEDIR not found
Qual o problema?
Resposta:
Provavelmente algum dos shell scripts necessários não está configurado com permissões de execução.
Corrija as permissões dos ficheiros .sh por forma a terem permissões de execução para o seu utilizador.
chmod +x *.sh
Pergunta:
Ao tentar aceder ao jUDDI+Tomcat, obtenho o erro:
... ServletException ... ConfigurationException ... URISyntaxException: Illegal character in path at index
Qual o problema?
Resposta:
Provavelmente o caminho (path) para a pasta de instalação do jUDDI contém espaços ou caracteres acentuados.
Instalar numa path sem espaços nem caracteres acentuados,
por exemplo, em c:\temp\
Pergunta:
Ao tentar ligar-me ao UDDI, recebo a seguinte mensagem de erro:
org.apache.commons.configuration.ConfigurationException: Cannot locate configuration source META-INF/uddi.xml
Qual o problema?
Resposta: O ficheiro uddi.xml serve para definir vários parâmetros que são necessários para a ligação ao UDDI registry (e.g. endereços do registry). O caminho do ficheiro uddi.xml é indicado nas propriedades da ligação ao UDDI registry, como se pode perceber no exemplo dado no tutorial de UDDI. Este erro denota que o pathname indicado para o ficheiro está errado. No caso de um web service, este ficheiro deve ser colocado na directoria WEB-INF/classes dentro do .war. No caso de uma aplicação consola, é necessário definir um pathname que seja correcto.
Pergunta: Como posso limpar a base de dados do jUDDI através da linha de comandos?
Resposta:
Parar jUDDI/Tomcat (executar shutdown.bat / shutdown.sh caso não esteja).
Apagar a directoria bin/target/juddi-derby-test-db.
Pergunta:
Como resolver o seguinte erro do UDDI?
WSDLException (at /definitions/import[1]/definitions/import/definitions/types/xsd:schema/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'jar:file:/.../uddi-ws-3.1.3.jar!/www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd'.: java.net.UnknownHostException: www.w3.org
Resposta:
O jUDDI gera os seus próprios Web Services a partir de diversos WSDL
e um deles refere um schema no domínio www.w3.org.
Isto significa que o jUDDI não funciona correctamente se a máquina não estiver ligada à internet.
Pergunta: O que significam as mensagens da biblioteca SLF4J?
Resposta: As linhas seguintes indicam que a biblioteca de logging SL4J não está incluída no classpath e que por isso as mensagens vão ser ignoradas.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.Estas linhas podem ser ignoradas, a não ser que se pretenda mesmo usar esta biblioteca. Nesse caso, consultar a página da biblioteca.
Pergunta:
Ainda tenhos erros no jUDDI ou wsimport que não são descritos noutras perguntas.
Exemplo 1 : O projecto encontra-se localizado num caminho a começar por "C:\program files"
directory not found: C:\programExemplo 2 : O repositório local do maven encontra-se em "C:\users\André"
Exception in thread "main" java.lang.ClassCastException: java.lang.AssertionError cannot be cast to java.lang.Exception at org.jvnet.jax_ws_commons.jaxws.Invoker.main(Invoker.java:87)Qual é o problema?
Resposta:
JUDDI e wsimport não funcionam bem com espaços e/ou caracteres acentuados na path de instalação (em Windows).
Por exemplo, usar as seguintes directorias poderá dar problemas:
C:\program files C:\users\AndréSugestão:
C:\java\ C:\dev\
© Docentes de Sistemas Distribuídos,
Dep. Eng. Informática,
Instituto Superior Técnico, Universidade de Lisboa