Ontem precisei instalar o emissor de nota fiscal eletrônica do Sebrae no computador do meu pai. Ele faz vendas pelo Mercado Livre há muito tempo e recentemente passou a ser necessário que todo vendedor faça a emissão de NF-e. Há mais de 5 anos meus pais usam a distribuição Linux Ubuntu sem nenhum problema nesse período.
Eu tenho usado a distribuição Fedora nos últimos anos e testei a instalação no meu computador para identificar se ela seria possível. O próprio manual de instalação indica o suporte a Linux, então não imaginei ter problemas.
De fato, segui as instruções do manual e a instalação no Fedora funcionou sem problemas. Passei as mesmas instruções ao meu pai, mas surpreendentemente ocorreu um erro:
java.lang.NullPointerException at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOHelper.currentSession(DSGEDAOHelper.java:103) at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOHelper.beginTransaction(DSGEDAOHelper.java:130) at br.gov.sp.fazenda.dsge.model.dao.util.DSGEDAOInterceptorHelper.intercept(DSGEDAOInterceptorHelper.java:54) at br.gov.sp.fazenda.dsen.model.business.ParametroBusiness$$EnhancerByCGLIB$$4f0e102.carregaParametrosAppContext() at br.gov.sp.fazenda.dsen.model.facade.ParametroFacade.carregaParametrosAppContext(ParametroFacade.java:40) at br.gov.sp.fazenda.dsen.controller.DSENSystemController.c(DSENSystemController.java:104) at br.gov.sp.fazenda.dsen.controller.DSENSystemController.execAfterStartApp(DSENSystemController.java:67) at br.gov.sp.fazenda.dsge.controller.DSGESystemController.startApp(DSGESystemController.java:151) at br.gov.sp.fazenda.dsen.view.DSENDesktop$1.run(DSENDesktop.java:138)
A principio achei que fosse algo trivial, talvez a versão do Java ou algo assim, mas o erro se mostrou bem mais complicado para resolver.
Pesquisando no Google encontrei várias pessoas com o mesmo erro como [1], [2] e [3]. Alguns relatos são tem quase 13 anos e sugerem os mesmos passos do manual para criação do diretório /database e definição de permissão de acesso com o chmod ou então recomendam que seja utilizada outra versão do Java. Experimentei todas as soluções indicadas, mas nada resolveu o erro.
Após várias experiências para entender a razão do emissor funcionar apenas no Fedora, minha última suspeita estava na versão do icedtea-web. O Fedora é a única distribuição que já empacota a versão 2.0 alpha, enquanto praticamente todas as outras distribuições linux incluem apenas a versão 1.8 em seus repositórios.
Acessei o repositório do projeto no Github e constatei que não existiam pacotes deb para instalação da versão 2.0, estando disponível apenas o código fonte. As instruções para build do projeto também estavam desatualizadas e não funcionavam mais.
Essa tarefa, que concentra discussões sobre build da versão 2.0 que me ajudou a entender como fazer o build do icedtea. Para auxiliar quem se deparar com o mesmo problema e considerando que essa solução não está documentada em nenhum lugar, deixo as instruções abaixo.
Primeiro passo, instale as dependências para o build:
sudo apt install mvn git cargo openjdk-8-jdk
É importante destacar que o build funcionou apenas com a JDK8, não consegui fazer funcionar com a JDK11.
Por alguma razão, o build não utiliza a variável JAVA_HOME definida no ambiente, então é necessário definir a variável JRE:
export JRE=/usr/lib/jvm/java-8-openjdk-amd64
Execute o build do projeto utilizando o Maven:
mvn clean install -DskipTests -P launchers
Se o build ocorrer sem erros o executável javaws estará no diretório launchers/target/bin/ e poderá ser utilizado para executar o arquivo JNLP do emissor de NF-e.