kailongapple commented on issue #5700:
URL: https://github.com/apache/seatunnel/issues/5700#issuecomment-5000324832
SeaTunnel 要求 source / sink / transform 是 List。
但 libs 里 seatunnel-config-base 和 seatunnel-config-shade 同包冲突,按字母序先加载了
base,source { MySQL-CDC {...} } 被解析成 Map,类型转换就炸了。
已改:docker-entrypoint.sh 让 seatunnel-config-shade 排在 classpath 最前。
正确做法:让 shade 先于 base 进 classpath(已在 docker-entrypoint.sh 里做了):
# 先加 shade
CP=.../seatunnel-config-shade-2.3.8.jar
# 再加 libs 里其它 jar(含 base)
`#!/bin/bash
#
# Foreground entrypoint for SeaTunnel Web in Docker.
# SEATUNNEL_HOME must be provided via volume mount (Engine client, separate
from Web image).
#
set -e
SEATUNNEL_WEB_HOME="${SEATUNNEL_WEB_HOME:-/opt/seatunnel-web}"
SEATUNNEL_HOME="${SEATUNNEL_HOME:-/opt/seatunnel}"
LOGDIR="${SEATUNNEL_WEB_HOME}/logs"
mkdir -p "${LOGDIR}" "${SEATUNNEL_WEB_HOME}/datasource"
export SEATUNNEL_HOME
if [ ! -f "${SEATUNNEL_HOME}/bin/seatunnel.sh" ]; then
echo "ERROR: SEATUNNEL_HOME=${SEATUNNEL_HOME} is not initialized."
echo " Mount the Engine client volume or wait for seatunnel-init to
finish."
exit 1
fi
if [ -z "${JAVA_HOME}" ]; then
JAVA_BIN="$(command -v java)"
else
JAVA_BIN="${JAVA_HOME}/bin/java"
fi
# Prefer full JAVA_OPTS; otherwise build from JAVA_XMS / JAVA_XMX (set by
compose as plain values)
if [ -z "${JAVA_OPTS}" ]; then
JAVA_XMS="${JAVA_XMS:-1g}"
JAVA_XMX="${JAVA_XMX:-1g}"
JAVA_OPTS="-server -Xms${JAVA_XMS} -Xmx${JAVA_XMX} -Xmn512m"
fi
JAVA_OPTS="${JAVA_OPTS} -Dseatunnel-web.logs.path=${LOGDIR}"
JAVA_OPTS="${JAVA_OPTS} -DSEATUNNEL_HOME=${SEATUNNEL_HOME}"
JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${LOGDIR}/dump.hprof"
echo "Using JAVA_OPTS=${JAVA_OPTS}"
SPRING_OPTS="${SPRING_OPTS:--Dspring.config.name=application.yml
-Dspring.config.location=classpath:application.yml}"
if [ -n "${SPRING_PROFILES_ACTIVE}" ]; then
SPRING_OPTS="${SPRING_OPTS}
-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}"
fi
if [ -z "${ST_WEB_BASEDIR_PATH}" ]; then
export ST_WEB_BASEDIR_PATH="${SEATUNNEL_WEB_HOME}"
fi
# plugin-mapping.properties is required by Web; copy from mounted Engine
client
if [ -f "${SEATUNNEL_HOME}/connectors/plugin-mapping.properties" ]; then
cp -f "${SEATUNNEL_HOME}/connectors/plugin-mapping.properties" \
"${SEATUNNEL_WEB_HOME}/conf/plugin-mapping.properties"
fi
cd "${SEATUNNEL_WEB_HOME}"
# seatunnel-config-base 与 seatunnel-config-shade 同包冲突;
# 必须先加载 shade,否则 source/sink 会被解析成 Map,触发
# ClassCastException: LinkedHashMap cannot be cast to ArrayList
CP="${SEATUNNEL_WEB_HOME}/conf"
SHADE_JAR=$(ls "${SEATUNNEL_WEB_HOME}"/libs/seatunnel-config-shade-*.jar
2>/dev/null | head -1)
if [ -n "${SHADE_JAR}" ]; then
CP="${CP}:${SHADE_JAR}"
fi
for jar in "${SEATUNNEL_WEB_HOME}"/libs/*.jar; do
case "${jar}" in
*seatunnel-config-shade*) continue ;;
*) CP="${CP}:${jar}" ;;
esac
done
for jar in "${SEATUNNEL_WEB_HOME}"/datasource/*.jar; do
[ -f "${jar}" ] && CP="${CP}:${jar}"
done
exec "${JAVA_BIN}" ${JAVA_OPTS} \
-cp "${CP}" \
${SPRING_OPTS} \
org.apache.seatunnel.app.SeatunnelApplication
`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]