Pergunta

Estamos presos com Java2SE v1.4 até o final de 2010. Isso é muito desagradável, mas não podemos ajudá-lo. Que opções temos que usar alguns dos novos recursos já agora? Eu posso pensar de várias maneiras, como

  • mudando o código de bytes, por exemplo usando Retrotranslator ou Retroweaver .

  • backport de bibliotecas, por exemplo Concurrent Backport , mas isso não ajuda dos genéricos.

  • emulação de Java 5 características, por exemplo, verificadas Coleções, VarArgs com métodos auxiliares, etc.

  • alterar o código-fonte pré-compilação, tirando tudo 1.5 coisas antes da compilação final, por exemplo, usando Declawer pode fazer isso.

Estou mais interessado na experiência muito positiva com ele em ambientes de produção utilizando o WebLogic e outras coisas "real".

Foi útil?

Solução

Obrigado por suas respostas. Aqui está o resumo de todas as respostas relevantes e minha própria investigação.

Alterar o bytecode: O Retros
Isso é feito pela "retro" -ferramentas : Retrotranslator , Retroweaver e < a href = "http://www.jboss.org/community/docs/DOC-10738" rel = "nofollow noreferrer"> JBossRetro . Retrotranslator parece ser o mais maduro e ativo deles ferramenta. Estas ferramentas digitalizar todas as classes e mudar o bytecode para remover Java 5 e 6 características. Muitas características java5 são suportados, alguns usando bibliotecas Backport 3rd party. Esta opção é mais popular e há algum feedback positivo dos usuários. Experimentos mostraram que ele está trabalhando como esperado. Veja um breve resumo sobre developerworks .

Pro: Você pode desenvolver inteiramente em Java 5, os módulos de construção e todos os tipos de frascos. No final, você apenas transformar todas as classes para Java 1.4 e pacote seu EAR. Isso é facilmente feito com a integração Maven de Retrotranslator (org.codehaus.mojo:retrotranslator-maven-plugin).

Con: ambientes conservadoras não permitem alterado bytecode para ser implantado. O resultado da retro-passo não é visível para qualquer codificador e não pode ser aprovado. O segundo problema é o medo: Pode haver algum problema de produção enigmática e o código retro é mais um passo que pode ser responsabilizado por isso. fornecedores App-servidor pode recusar ajuda devido a mudou bytecode. Então, ninguém quer assumir a responsabilidade de usá-lo em produção. Como este é sim um policital do que um técnico problema, por isso não vejo solução. Isso já aconteceu para nós, então eu estava procurando mais opções: - (

Compilando Java5 para Java 1.4: jsr14
Há uma opção sem suporte, javac -source 1.5 and -target jsr14 que compila a fonte Java5 para válido Java 1.4 bytecode. A maioria dos recursos como varargs ou prolongado por laço são traduzidas pelo compilador de qualquer maneira. Genéricos e anotações são retirados. Enums não são suportados e eu não sei sobre autoboxing, como os métodos valueOf foram principalmente introduzido em Java5.

Con: Somente o código byte é traduzido, o uso da biblioteca não é alterado. Então você tem que ter cuidado para não usar APIs específicas java5 (mas poderia usar Backports). Além disso, você tem que construir todos os módulos ao mesmo tempo, porque para o tempo de desenvolvimento que você quer propably código Java5 com informações genéricas e anotação. Então você tem que construir todo o projeto a partir do zero para Java 1.4 produção.

Alterar a Fonte de volta para Java 1.4: Declawer
Como respondeu com uma pergunta relacionada, lá é Declawer , uma extensão do compilador, que funciona para genéricos e varargs, mas não para reforçada por laço ou autoboxing. A fonte gerado "é um pouco funky, mas não muito ruim".

Pro: A fonte gerado está disponível e pode ser revisto. No pior caso correções podem ser feitas nesta fonte. Não há "mágica", porque a fonte é válido Java. Algumas pessoas ainda utilizam JAD (decompiler Java) para obter a fonte Java 1.4 novamente. A saída de Jad legível é legível se você compilar com debug informação e não usar classes internas.

Con: Semelhante ao -target jsr14, é necessário um passo extra na implantação. Mesmos problemas com bibliotecas também.

Alterar a Fonte de volta para Java 1.4: com a mão
Várias respostas sugeriu a fazê-lo com a mão. Para um, repetindo construção processo th automáticaé naturalmente não é útil, mas para um tempo de mudanças é razoável. Apenas automatizar o que é possível. Talvez olhar para Antlr para a criação de uma ferramenta de conversão home-grown.

backported Bibliotecas:
O problema é que java5 também vem novas bibliotecas, que não estão disponíveis em JREs mais antigos, veja pergunta relacionada . Felizmente, existem vários bibliotecas portados que lhe dão algumas funcionalidades de Java5, mas não pode recursos de linguagem simular como os genéricos.

Emulando Java5 apresenta em Java 1.4 código:
Eu estava pensando sobre algumas coisas que você pode fazer para tornar sua vida mais fácil e ainda ficar com Java 1.4. A maioria de características importantes são coleções typesafe, aqui estão algumas idéias:

  • Em vez de usar os genéricos você pode criar seus próprios recipientes typesafe com algum modelo.
  • Adicionar um typesafe Iterator (que não é Iterator mais).
  • Adicionar métodos asList que permite argumentos 1,2,...,n e uma variedade de-los (para simular varargs).
  • Métodos para varargs (convertendo argumentos 1,...,n para matrizes) e valueOf pode ser colocado em algum classe auxiliar.

Outras dicas

pré-compilação de código fonte, tirando tudo 1.5 coisas antes da compilação final, e implantação. Existem algumas ferramentas que pode fazer isso?

Sim. Eles são chamados de Retrotranslator ou Retroweaver. Além de Generics (que só existem por causa do compilador de qualquer maneira), você não pode simplesmente "tira 1,5 coisas". Enums (e talvez também algumas outras características) têm de ser substituídas por código funcionalmente equivalente. Que é exatamente o que essas ferramentas fazer.

Você pode código com JDK 1.5 funcionalidades e alvo JDK 1.4 em tempo de compilação. Veja opções javac disponíveis. No entanto, a maioria das bibliotecas já estão usando JDK 1.5 código, então você vai ser preso com libs idade.

É importante notar que, enquanto Java 1.4 tem sido EOL por algum tempo. Java 5.0 será EOL 08 de outubro de 2009. Se alguém está prometendo-lhe Java 5.0 em 2010, gostaria de perguntar por quê?!

Para anotações simular em java 1.4 você pode usar http://xdoclet.sourceforge.net/ XDoclet / index.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top