Em Linux (ou em Windows com o cygwin), para procurar uma determinada classe dentro de uma série de ficheiros jar, pode-se usar o seguinte comando:
find . -name "*.jar" -exec jar tf {} \; | grep NOME_DA_CLASSE
sexta-feira, 4 de janeiro de 2013
quarta-feira, 2 de janeiro de 2013
Eclipse: Alterar o valor por defeito do @author
Para alterar o valor por defeito da propriedade @author no Eclipse basta simplesmente editar o ficheiro eclipse.ini com o valor seguinte (adicionar no final do ficheiro):
-Duser.name=NovoNomeDoAutor
Por defeito o nome colocado na @author é o do utilizador logado. Se for feito conforme indicado acima, a @autor passa a conter o valor indicado após o =, neste caso NovoNomeDoAutor.
-Duser.name=NovoNomeDoAutor
Por defeito o nome colocado na @author é o do utilizador logado. Se for feito conforme indicado acima, a @autor passa a conter o valor indicado após o =, neste caso NovoNomeDoAutor.
sábado, 8 de dezembro de 2012
Instalar as fontes Microsoft True Type em Red Had Linux
Para instalar as fontes Microsoft True Type em Red Hat Linux versão 5 enterprise seguir os passos seguintes:
Fonte: http://www.yolinux.com/TUTORIALS/LinuxListOfFonts.html
- Descarregar o ficheiro msttcorefonts-1.3-4.noarch.rpm
- Criar a directoria TrueType usando o comando: mkdir -m 755 /usr/X11R6/lib/X11/fonts/TrueType (pode-se usar a directoria já existente /usr/share/X11/fonts/TTF ao invés de se criar uma nova. Neste caso não é necessário efectua os pontos 2 e 6 )
- Caso se tenha o 7zip abrir o ficheiro e extrair as fontes para a directoria criada acima.
- Caso contrário efectuar o seguinte:
- Copiar o ficheiro msttcorefonts-1.3-4.noarch.rpm para a directoria criada acima
- Mudar para a directoria criada acima
- Executar o comando: rpm2cpio msttcorefonts-1.3-4.noarch.rpm | cpio -idmv
- As fontes estarão na directoria: ./usr/share/fonts/msttcorefonts/
- Mover as fontes para /usr/X11R6/lib/X11/fonts/TrueType
- Apagar a directoria ./usr/share/fonts/msttcorefonts/
- Na directoria onde estão as fontes extraídas executar: chmod 644 *.ttf
- Executar o comando ttmkfdir > fonts.scale
- Adicionar a directoria /usr/X11R6/lib/X11/fonts/TrueType ao ficheiro de configuração /etc/X11/fs/config
- Localizar a linha catalogue = comma-separated-list-of-font-directories e adicionar a directoria criada no final
- Executar o comando: /usr/bin/fc-cache
- Executar o comando: xset fp rehash
- Executar o comando: service xfs restart
- Usar o comando fc-list para listar as fontes instaladas
Fonte: http://www.yolinux.com/TUTORIALS/LinuxListOfFonts.html
sexta-feira, 30 de novembro de 2012
JAXB : unexpected element (uri:"http://...", local:"..."). Expected elements are (none)
Após a geração do código Java com o utilitário xjc a partir dos XSDs, e efectuado o código de marshall/unmarshall, ao usar o respectivo código ocorrem erros como os a seguir descritos.
Unmarshall
Erro durante o unmarshall:
unexpected element (uri:"http://.../.../...", local:"MinhaBase"). Expected elements are (none)
Aparentemente poderá ser um problema no XML a descodificar. Contudo se se tiver a certeza que o problema não está no XML a descodificar, então poderá estar a ocorrer um problema relacionado com a ausência da anotação @XmlRootElement na classe base do esquema gerado. Para verificar isto basta abrir a classe base do esquema gerado e verificar se a tag @XmlRootElement está presente. Se estiver o problema é outro que o descrito a seguir.
Resumidamente, isto não é um bug do JAXB. A ausência da anotação está relacionada com a impossibilidade do xjc determinar com exactidão qual a classe raiz do esquema. Em caso de dúvida o xjc não coloca esta tag.
A solução não é nada complicada.
Basta alterar a linha de código (onde está reader poderá estar outro tipo qualquer que seja aceite):
resultadoUnmarshal = (MeuTipoBase) unmarshaller.unmarshal(reader);
Por:
JAXBElement root = unmarshaller.unmarshal(new StreamSource(reader), MeuTipoBase.class);
resultadoUnmarshal = root.getValue();
Marshall
Erro durante o marshall:
com.sun.istack.internal.SAXException2: unable to marshal type "pt.MeuTipoBase" as an element because it is missing an @XmlRootElement annotation
Aqui nota-se claramente que o problema está relacionado com a falta da anotação @XmlRootElement na classe base. Ver este artigo para mais detalhes.
A solução aqui é também simples.
Em primeiro lugar é necessário abrir a classe ObjectFactory onde está a classe MeuTipoBase.
Procurar por algo semelhante a
@XmlElementDecl(namespace = "http://.../.../...", name = "MinhaBase")
public JAXBElement create MinhaBase(MeuTipoBase, value) {
return new JAXBElement<MeuTipoBase>(_MINHA_BASE_QNAME, MeuTipoBase.class, null, value);
}
Ver a classe ObjectFactory facilita na obtenção dos parametros correctos para o objecto QName que terá de ser criado.
No nosso código substituir a linha (ou linha semelhante)
marshaller.marshal(instanciaAcodificar, System.out);
Por
marshaller.marshal(new JAXBElement(new QName(" http://.../.../..", "MinhaBase"), MeuTipoBase.class, null, instanciaAcodificar), System.out);
Os parametros usados para criar a instância de QName são as que estão na linha do ObjectFactory
@XmlElementDecl(namespace = "http://.../.../...", name = "MinhaBase")
A não ser que o problema esteja entre a cadeira e o teclado, terão estes problemas resolvidos.
Unmarshall
Erro durante o unmarshall:
unexpected element (uri:"http://.../.../...", local:"MinhaBase"). Expected elements are (none)
Aparentemente poderá ser um problema no XML a descodificar. Contudo se se tiver a certeza que o problema não está no XML a descodificar, então poderá estar a ocorrer um problema relacionado com a ausência da anotação @XmlRootElement na classe base do esquema gerado. Para verificar isto basta abrir a classe base do esquema gerado e verificar se a tag @XmlRootElement está presente. Se estiver o problema é outro que o descrito a seguir.
Resumidamente, isto não é um bug do JAXB. A ausência da anotação está relacionada com a impossibilidade do xjc determinar com exactidão qual a classe raiz do esquema. Em caso de dúvida o xjc não coloca esta tag.
A solução não é nada complicada.
Basta alterar a linha de código (onde está reader poderá estar outro tipo qualquer que seja aceite):
resultadoUnmarshal = (MeuTipoBase) unmarshaller.unmarshal(reader);
Por:
JAXBElement
resultadoUnmarshal = root.getValue();
Marshall
Erro durante o marshall:
com.sun.istack.internal.SAXException2: unable to marshal type "pt.MeuTipoBase" as an element because it is missing an @XmlRootElement annotation
Aqui nota-se claramente que o problema está relacionado com a falta da anotação @XmlRootElement na classe base. Ver este artigo para mais detalhes.
A solução aqui é também simples.
Em primeiro lugar é necessário abrir a classe ObjectFactory onde está a classe MeuTipoBase.
Procurar por algo semelhante a
@XmlElementDecl(namespace = "http://.../.../...", name = "MinhaBase")
public JAXBElement
return new JAXBElement<MeuTipoBase>(_MINHA_BASE_QNAME, MeuTipoBase.class, null, value);
}
Ver a classe ObjectFactory facilita na obtenção dos parametros correctos para o objecto QName que terá de ser criado.
No nosso código substituir a linha (ou linha semelhante)
marshaller.marshal(instanciaAcodificar, System.out);
Por
marshaller.marshal(new JAXBElement
Os parametros usados para criar a instância de QName são as que estão na linha do ObjectFactory
@XmlElementDecl(namespace = "http://.../.../...", name = "MinhaBase")
A não ser que o problema esteja entre a cadeira e o teclado, terão estes problemas resolvidos.
sexta-feira, 23 de novembro de 2012
Como não executar testes no maven
Por vezes é necessário não executar os testes num projecto maven.
Ou porque não é o ambiente apropriado, ou porque se está com pressa e não se quer que
os testes executem, etc.
Através da linha de comandos é simples.
Basta especificar a opção: -DskipTests
Caso se esteja por exemplo no Eclipse e se esteja com problemas com falhas nos testes
e se quer que o maven do Eclipse não execute os testes, então pode-se criar uma nova
configuração de Run para o maven e aí indicar que se quer saltar os testes.
Para evitar no próprio projecto (pom.xml) que os testes sejam executados, basta
incluir na parte dos plugins o seguinte bloco:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12</version><configuration><skipTests>true</skipTests></configuration></plugin>
quinta-feira, 22 de novembro de 2012
Obter conteúdo de um CLOB (de texto) em Oracle SQL
Maneira simples de se ver o que está num CLOB (desde que seja um CLOB de texto).
SELECT DBMS_LOB.substr(coluna_clob, 3000)
FROM tabela_com_clob
Problemas de build no maven
Durante a execução de mvn clean install ocorre o erro seguinte:
Downloading: https://........................pom
Exception in thread "pool-1-thread-1" ---------------------------------------------------java.lang.NoSuchMethodError: org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon.getReadTimeout()I
Este erro ocorre devido a um bug na versão do maven 3.0.3. A solução é actualizar o maven para a versão 3.0.4 (ou superior caso já exista).
Downloading: https://........................pom
Exception in thread "pool-1-thread-1" ---------------------------------------------------java.lang.NoSuchMethodError: org.apache.maven.wagon.shared.http4.AbstractHttpClientWagon.getReadTimeout()I
Este erro ocorre devido a um bug na versão do maven 3.0.3. A solução é actualizar o maven para a versão 3.0.4 (ou superior caso já exista).
Subscrever:
Mensagens (Atom)