Reimplantar alternativas ao JRebel [fechado]

190

O JRebel permite que o código compilado recentemente seja reimplementado sem reiniciar o aplicativo. Gostaria de saber se existe alguma alternativa (gratuita?). A página de perguntas frequentes responde a essa pergunta, mas tenho certeza de que é tendenciosa em relação ao JRebel. Esta pergunta foi feita há um ano neste site, mas estou trazendo-a de volta para verificar se alguém tem alguma informação nova.

Em uma nota lateral, eu realmente gosto do JRebel, mas se houver uma alternativa gratuita, estou disposto a tentar.

Uma observação adicional: estou trabalhando em um projeto de código aberto, e eles oferecem licenças gratuitas de um ano para pessoas que podem provar que estão em um projeto de código aberto. O que funciona muito bem para mim (www.kuali.org), mas não vou participar desse projeto para sempre.

Jay
fonte
53
Boa pergunta. Também procuramos uma alternativa ao JRebel, já que o departamento de vendas é extremamente invasivo. Não temos problemas para pagar por um produto como o JRebel, mas não quando eles incomodam nossos desenvolvedores e departamento de TI 24/7.
Neu242
4
Há uma alternativa para JRebel pela própria ZeroTurnAround: a versão gratuita do JRebel para projetos de código aberto e estudo de caso ... my.jrebel.com
dellasavia
2
Sei que é uma resposta tardia, você pode dar uma olhada no Spring Loaded -, que é um agente da JVM para recarregar alterações de arquivos de classe enquanto uma JVM está em execução. Ele transforma as classes no tempo de carregamento para torná-las passíveis de recarregamento posterior. Diferentemente do 'hot code replace', que só permite alterações simples quando uma JVM está em execução (por exemplo, alterações nos corpos dos métodos), o Spring Loaded permite adicionar / modificar / excluir métodos / campos / construtores e muito mais ...
Simple-Solution
Depurador do Eclipse - substitui seu código ativo instantaneamente.
User1050755
Tente postar isso no site irmão, o Software Recommendations Stack Exchange .
Basil Bourque

Respostas:

97

Dê uma olhada no DCEVM , é uma modificação da VM HotSpot que permite redefinições ilimitadas de classe em tempo de execução. Você pode adicionar / remover campos e métodos e alterar os super tipos de uma classe em tempo de execução. Os recursos do DCEVM podem ser integrados em uma atualização futura do Java como parte do JEP 159 .

Os binários disponíveis no site original estão limitados ao Java 6u25 e às versões anteriores do Java 7. O projeto foi bifurcado no Github e suporta versões recentes do Java 7 e 8. O mantenedor fornece binários para VMs de 32/64 bits no Windows / Linux. A partir do Java 11, o projeto foi transferido para um novo repositório GitHub e agora também fornece binários para o OS X.

O DCEVM é fornecido com o Debian e Ubuntu, é convenientemente integrado ao OpenJDK e pode ser chamado com ele java -dcevm. O nome do pacote depende da versão do JDK padrão:

Emmanuel Bourg
fonte
5
Funciona bem, achei mais rápido e menos consumidor de memória que o JRebel. A única restrição é manter o Java 6u25.
Emmanuel Bourg
3
Muito obrigado. Arruinei o dia inteiro tentando fazer o jRebel funcionar como desejado. A DCEVM veio resgatar.
alehro
4
Aqui estão as instruções completas de compilação e instalação do DCEVM no JDK 7u45 e no MacOSX: neu242.livejournal.com/52962.html
neu242
1
O JEP 159 não faz parte do JDK 8. Pode ter sido adiado para o JDK 9, mas ainda não há confirmação.
KrishPrabakar
5
Encontrei alguns binários completos da JVM 1.7 aqui: dcevm.nentjes.com, portanto, não é necessário corrigir sua JVM. Eu tentei o win64 e funcionou muito bem para mim. Eu também escrevi sobre isso aqui se você precisar de mais detalhes: javainformed.blogspot.com/2014/01/jrebel-free-alternative.html
dnang
42

O Hotswap Agent é uma extensão do DCEVM que suporta muitas estruturas Java (recarregar a definição do bean Spring, mapeamento de entidade do Hibernate, configuração no nível do criador de logs, ...).

Também há muita documentação sobre como configurar o DCEVM e os binários compilados para Java 1.7.

edudante
fonte
5
Agora eles têm um site dedicado: hotswapagent.org . O projeto é bastante novo, mas parece funcionar muito bem.
Didier G
Eu segui este tutorial para integrá-lo no eclipse após isntalling-lo: tirthalpatel.blogspot.fr/2014/06/... ele funciona como um encanto
jpprade
@edudant Depois de instalar o 'Hotswap agent', precisamos instalar o DCEVM? Porque eu instalei o DCEVM usando "sudo apt install openjdk-11-jre-dcevm" no Ubuntu 19.04 e também o plug-in no IntelliJ Ultimate 2019.1.3. Se a instalação do 'Hotswap agent' e muito menos o trabalho do JRebel, qual é a utilidade do DCEVM !?
20

Pelo pessoal do Spring, usado para recarregar o Grails, mas também funciona com Java:

https://github.com/SpringSource/spring-loaded

Ramon
fonte
3
Não quero resmungar, mas o carregamento por mola não suporta o recarregamento de dependência.
lbednaszynski
Pelo que me lembro, existem propriedades do sistema que você pode definir para dizer quais pacotes tornar recarregáveis. Ele tem outras limitações e eu provavelmente preferiria usar o DCEVM de qualquer forma.
Ramon
1
"quais pacotes tornar recarregáveis" - correto. O problema, conforme apontado por @lbednaszynski, é que ele não recarregará os JARs dependentes. Isso é essencial para projetos com vários módulos do Maven.
Marcel Stör
Este projeto está no sótão por enquanto!
Jpmottin
9

Eu tenho trabalhado em um projeto de código aberto que permite substituir classes a mais do que o hot swap permite: https://github.com/fakereplace/fakereplace

Pode ou não funcionar para você, mas qualquer feedback é apreciado

Stuart Douglas
fonte
4

Você pode dar uma olhada no seguinte:

Suporte a HotSwap: a arquitetura orientada a objetos da Java HotSpot VM permite recursos avançados, como redefinição de classe on-the-fly ou "HotSwap". Esse recurso fornece a capacidade de substituir o código modificado em um aplicativo em execução por meio das APIs do depurador. O HotSwap adiciona funcionalidade à Arquitetura de Depurador da Plataforma Java, permitindo que uma classe seja atualizada durante a execução enquanto está sob o controle de um depurador . Ele também permite que operações de criação de perfil sejam executadas por hotswapping nas versões dos métodos nos quais o código de criação de perfil foi inserido.

No momento, isso permite apenas que o corpo do método recém-compilado seja reimplementado sem reiniciar o aplicativo. Tudo que você precisa fazer é executá-lo com um depurador. Eu tentei no Eclipse e funciona esplendidamente.

Além disso, como Emmanuel Bourg mencionou em sua resposta ( JEP 159 ), há esperança de ter suporte para a adição de supertipos e a adição e remoção de métodos e campos.

Referência: White paper Java 135217: Confiabilidade, disponibilidade e facilidade de manutenção

Alex
fonte
-3

JRebel é gratuito. Não compre. Selecione a opção "grátis" (botão de opção) na página "comprar". Depois selecione "Social". Depois de se inscrever, você receberá uma chave de licença JRebel totalmente funcional. É possível fazer o download do JRebel ou usar a chave na versão incorporada dos IDEs. A captura (sim, existe uma captura), você deve permitir que eles publiquem em seu nome (anunciar) uma vez por mês na sua linha do tempo do FB ou na conta do Twitter. Eu dei a eles minha conta no twitter, nada demais, nunca a uso e ninguém que conheço realmente a usa. Então economize $ 260.

Michael Andrews
fonte
14
Há mais um problema. O JRebel Social é gratuito apenas para uso não comercial. Sim, claro, não verificaremos se você está realmente usando-o para seu projeto pessoal ou no trabalho, mas os auditores podem não gostar se virem o uso indevido do software.
Anton Arhipov 10/11
2
Eu nunca sugeriria o contrário. De fato - a única razão pela qual eu trato disso é porque não há mais licença "individual". Consegui que minha empresa pagasse minha licença de trabalho. Eu também paguei por uma licença pessoal, para meu uso pessoal, por mais de 3 anos. Mas quando o preço ao norte de US $ 260 por ano, isso se tornou impraticável. Essa é a melhor solução para mim (e para outras), mas eu também continuaria pagando se o preço fosse razoável.
Michael Andrews
42
Além disso, o fato de que todos os anos eu preciso recomprar o software que já comprei é frustrante. Nenhuma outra empresa faz isso. Normalmente você compra um software uma vez. Se você optar por atualizar - você o compra novamente pelo preço total (ou talvez um preço de atualização, dependendo da empresa). Mas pelo que você está pagando são NOVOS recursos - não os mesmos que você já pagou. Seria como a Apple ou a Microsoft desativando o computador todos os anos até você pagar pelo sistema operacional novamente. Alimento para o pensamento.
Michael Andrews
2
O JRebel Social foi substituído pelo myJRebel. Sua livre para uso não comercial, você só precisa permitir o compartilhamento de estatísticas: my.jrebel.com
Steve Swinsburg
1
Em suma, o JRebel é relativamente barato para uma licença de software de desenvolvedor.
Jared Hooper