上記と同様の手段で、Scalaも変えてみる。
Scalaをインストールする
function f_setup_scala() {
local _ver="${1:-2.12.3}"
local _extract_dir="${2:-/opt}}"
local _inst_dir="${3:-/usr/local/scala}"
if [ ! -d "${_extract_dir%/}/scala-${_ver}" ]; then
if [ ! -s "${_extract_dir%/}/scala-${_ver}.tgz" ]; then
curl --retry 3 -C - -o "${_extract_dir%/}/scala-${_ver}.tgz" "https://downloads.lightbend.com/scala/${_ver}/scala-${_ver}.tgz" || return $?
fi
tar -xf "${_extract_dir%/}/scala-${_ver}.tgz" -C "${_extract_dir%/}/" || return $?
chmod a+x ${_extract_dir%/}/bin/*
fi
[ -d "${_inst_dir%/}" ] || ln -s "${_extract_dir%/}/scala-${_ver}" "${_inst_dir%/}"
export SCALA_HOME=${_inst_dir%/}
export PATH=$PATH:$SCALA_HOME/bin
}
書き換えたいクラスファイルを作成したあと、コンパイル
vim TestUtils.scala
export CLASSPATH=...(snip)...
scalac TestUtils.scala
CLASSPATHは走っているプロセスと同じのであれば、下記のファンクションが利用可
function f_javaenvs() {
local _port="${1}"
local _p=`lsof -ti:${_port}`
if [ -z "${_p}" ]; then
echo "Nothing running on port ${_port}"
return 11
fi
local _user="`stat -c '%U' /proc/${_p}`"
local _dir="$(dirname `readlink /proc/${_p}/exe` 2>/dev/null)"
export JAVA_HOME="$(dirname $_dir)"
export CLASSPATH=".:`sudo -u ${_user} $JAVA_HOME/bin/jcmd ${_p} VM.system_properties | sed -nr 's/^java.class.path=(.+$)/\1/p' | sed 's/[\]:/:/g'`"
}
差し替えたいJarファイルを見つける
function f_jargrep() {
local _cmd="jar -tf"
which jar &>/dev/null || _cmd="less"
find -L ${2:-./} -type f -name '*.jar' -print0 | xargs -0 -n1 -I {} bash -c ''${_cmd}' {} | grep -w '$1' && echo {}'
}
バックアップを作成後(重要!)差し替える
$JAVA_HOME/bin/jar -uf /usr/local/test/lib/test.jar com/test/utils/TestUtils*.class
確認する
$JAVA_HOME/bin/jar -tvf /usr/local/test/lib/test.jar | grep TestUtils
$JAVA_HOME/bin/javap -cp /usr/local/test/lib/test.jar -private com.test.utils.TestUtils
0 件のコメント:
コメントを投稿