Introdução
O Kettle é uma ferramenta ETL open source desenvolvida em Java puro, compatível com Windows, Linux e Unix, sem necessidade de instalação, oferecendo extração de dados eficiente e estável.
O WebSpoon é a versão web do Kettle, mantida pela comunidade Kettle, sem suporte oficial do Pentaho, e implementa a maioria das funcionalidades do Kettle.
Clonagem do Repositório
Endereço do repositório: https://github.com/HiromuHota/pentaho-kettle
git clone https://github.com/HiromuHota/pentaho-kettle.git
Compilação
Configure as variáveis de ambiente do Maven.
Coloque o arquivo settings.xml no diretório ~/.m2 e ajuste conforme necessário.
Conteúdo do settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- settings.xml recomendado para desenvolvimento de projetos Hitachi Vantara -->
<!--
Caso deseje espelhar tudo pelo repositório pentaho-public, descomente abaixo.
Não recomendado para desenvolvedores externos.
-->
<!--
<mirrors>
<mirror>
<id>pentaho-public</id>
<url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
-->
<!--
Não se esqueça de adicionar o setting-security.xml para descriptografar a senha.
-->
<servers>
<server>
<id>pentaho-public</id>
<username>devreaduser</username>
<password>{zIMyJWfHKfoHiBJAVsAgW4E5BcJzR+nhTtgPy0J+/rs=}</password>
</server>
</servers>
<!--
Ajuste a política de atualização ('updatePolicy') conforme sua necessidade para snapshots e releases.
Recomenda-se usar 'never' e executar o Maven com a flag '-U' quando necessário.
-->
<profiles>
<profile>
<id>pentaho</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- Permite usar plugins desses grupos na forma abreviada -->
<pluginGroups>
<pluginGroup>org.pentaho.maven.plugins</pluginGroup>
<pluginGroup>com.pentaho.maven.plugins</pluginGroup>
<pluginGroup>com.github.spotbugs</pluginGroup>
</pluginGroups>
</settings>
Compile as seguintes dependências localmente:
pentaho-xul-swt
git clone -b webspoon-9.0 https://github.com/HiromuHota/pentaho-commons-xul.git
cd pentaho-commons-xul
mvn clean install -pl swt -DskipTests
rap
Após clonar, navegue até o diretório rap/releng/org.eclipse.rap.build e edite o arquivo pom.xml. Localize a tag properties e altere os seguintes valores:
- Altere a propriedade
jetty-repo.urlpara:https://download.eclipse.org/jetty/updates/jetty-bundles-9.x/9.4.44.v20210927/ - Altere a propriedade
rap-extra-repo.urlpara:https://download.eclipse.org/rt/rap/base-platforms/3.14/extra-dependencies/
git clone -b webspoon-3.12.0 https://github.com/HiromuHota/rap.git
cd rap
mvn clean install -DskipTests
pentaho-vfs-browser
git clone -b webspoon-9.0 https://github.com/HiromuHota/apache-vfs-browser.git
cd apache-vfs-browser
mvn clean install -DskipTests
Após as etapas acima, execute mvn clean install -DskipTests para construir o projeto.
Após a compilação bem-sucedida, o arquivo spoon.war estará disponível em assemblies/client/target.
Alternativamente, é possível baixar o arquivo WAR já compilado em: https://github.com/HiromuHota/pentaho-kettle/releases
Implantação
Implantação com Tomcat
Copie o arquivo spoon.war para o diretório tomcat/webapps.
Baixe e descompacte o arquivo pdi-ce-xxxx.zip (versão 9.x).
Copie os diretórios system e plugins para tomcat/bin.
Inicie o Tomcat e acesse a aplicação.
Implantação com Docker
# Baixar a imagem
docker pull hiromuhota/webspoon
# Executar e acessar http://localhost:8080
docker run -d -p 8080:8080 hiromuhota/webspoon
Implantação com Docker Compose
Arquivo docker-compose.yml:
version: "3.3"
services:
kettle:
image: hiromuhota/webspoon:latest
volumes:
# Montar arquivos JAR adicionais no container, se necessário
- ./volumes/lib/mysql-connector-java-5.1.48.jar:/usr/local/tomcat/webapps/spoon/WEB-INF/lib/mysql-connector-java-5.1.48.jar
# Montar diretório .kettle para persistir dados do repositório (criar com mkdir -m 777 ./volumes/.kettle)
- ./volumes/.kettle:/home/tomcat/.kettle
# Montar arquivo de configuração para localização (ex.: chinês simplificado)
- ./volumes/setenv.sh:/usr/local/tomcat/bin/setenv.sh
environment:
- LANG=zh_CN.UTF-8
ports:
- "9002:8080"
Conteúdo do arquivo setenv.sh:
CLASSPATH=/usr/local/tomcat/lib/webspoon-security-9.0.0.0-423-22.jar
CATALINA_OPTS="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true"
JAVA_OPTS="-Duser.language=zh -Duser.region=CN -Dfile.encoding=UTF-8"
Inicialização e parada
# Executar no diretório onde está o docker-compose.yml
# Iniciar
docker compose up -d
# Parar
docker compose down
Depuração Remota
Habilitar o serviço de depuração remota
docker run -d -p 8080:8080 -p 9003:8000 \
-e JPDA_ADDRESS=8000 \
-e CATALINA_OPTS="-Dorg.eclipse.rap.rwt.developmentMode=true" \
hiromuhota/webspoon catalina.sh jpda run
Ou configure via docker-compose.yml:
version: "3.3"
services:
kettle:
image: hiromuhota/webspoon:latest
environment:
- JPDA_ADDRESS=8000
- CATALINA_OPTS="-Dorg.eclipse.rap.rwt.developmentMode=true"
ports:
- "8080:8080"
- "9003:8000"
command: ["catalina.sh", "jpda", "run"]
Configurar o IntelliJ IDEA para depuração remota:
Adicione uma configuração do tipo Remote JVM Debug e inicie-a.

O console exibirá a mensagem: Connected to the target VM, address: '192.168.5.22:9003', transport: 'socket'
