Labs SD

Software Labs / Projeto

Respostas a perguntas frequentes


Dúvidas gerais

  1. 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:

    • C:\program files
    • C:\users\André
    • C:\users\Alice Silva

    Dado este problema a sugestão é instalar o software numa pasta como C:\java\.


  2. 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.


  3. 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 -version
    
    Start Eclipse, go to "Help" menu, select "About Eclipse"


  4. Pergunta: Como confirmar se o PATH está correcto?

    Resposta: Abrir uma consola Linux e executar

    $ echo $PATH
    
    Abrir uma consola Windows e executar
    $ echo %PATH%
    


  5. 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/


  6. 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.


  7. 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.



Dúvidas sobre Maven

  1. 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).

    Mais informação

    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.


  2. 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
    


  3. Pergunta: Existe forma de consultar a árvore de dependências de um projeto Maven?

    Resposta: Sim, através do seguinte comando:

    $ mvn dependency:tree
    


  4. 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>
            ...
    


  5. 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>
    


  6. 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


  7. 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".


  8. 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).


  9. 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.


  10. 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>
    

  11. 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.


  12. 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>
    

  13. 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


Dúvidas sobre Eclipse

  1. 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

    Configuração de Maven goals em Eclipse
    Especificando em Base directory: o caminho para o diretório do projeto e em Goals: a sequência de ações Maven a desempenhar, pode clicar em Apply e a partir dai poderá executar com esta parametrização através do botão Run.
    Neste exemplo específico, ao clicar em Run serão executados para o projeto hello-ws-cli_juddi os comandos:
    • mvn generate-sources
    • mvn compile
    • mvn exec:java


  2. 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:

    Adição do JDK aos Installed JREs

    Carregue em Apply, OK. A partir de agora, o Eclipse está configurado para invocar as ferramentas de compilação de Java, tais como o javac.


  3. 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).


  4. 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>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <mainclass>example.cli.HelloClient</mainclass>
    <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
    ...
    </properties>

    <build>
    ...


  5. 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.


  6. 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)

    Eclipse Maven installation choice.



Dúvidas sobre jUDDI

  1. 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


  2. 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\


  3. 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.


  4. 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.


  5. 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.


  6. 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.


  7. 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:\program
    
    Exemplo 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