Had a need today to modify the contents of a WAR file and replace/update a specific XML file.
So you guessed it. I wrote a quick script for it.
Below are some usage screenshots:
Unpackaging a WAR:

Repackaging a WAR:

Here is the code:
unpackWar() {
echo "Type Full Java JAR/WAR Path: "
read FILE_PATH_FULL
#echo "FILE_PATH_FULL:"
#echo $FILE_PATH_FULL
FILE_EXTENSION=$(echo ${FILE_PATH_FULL##*.})
#echo "FILE_EXTENSION:"
#echo $FILE_EXTENSION
FILE_NAME_WITHOUT_EXTENSION=$(basename "$FILE_PATH_FULL" ".$FILE_EXTENSION")
#echo "FILE_NAME_WITHOUT_EXTENSION:"
#echo $FILE_NAME_WITHOUT_EXTENSION
FILE_NAME_WITH_EXTENSION="$FILE_NAME_WITHOUT_EXTENSION"
FILE_NAME_WITH_EXTENSION+="."
FILE_NAME_WITH_EXTENSION+="$FILE_EXTENSION"
#echo "FILE_NAME_WITH_EXTENSION:"
#echo $FILE_NAME_WITH_EXTENSION
FILE_PATH_DIRECTORY=$(printf '%s\n' "${FILE_PATH_FULL//$FILE_NAME_WITH_EXTENSION/}")
echo $FILE_PATH_DIRECTORY
#echo "FILE_PATH_DIRECTORY:"
#echo $FILE_PATH_DIRECTORY
OUTPUT_DIRECTORY="$FILE_PATH_DIRECTORY/$FILE_NAME_WITHOUT_EXTENSION"
#echo "OUTPUT_DIRECTORY:"
#echo $OUTPUT_DIRECTORY
OUTPUT_DIRECTORY_TEMP_FILE=$OUTPUT_DIRECTORY
OUTPUT_DIRECTORY_TEMP_FILE+="/"
OUTPUT_DIRECTORY_TEMP_FILE+=$FILE_NAME_WITH_EXTENSION
#echo "OUTPUT_DIRECTORY_TEMP_FILE:"
#echo $OUTPUT_DIRECTORY_TEMP_FILE
mkdir "$OUTPUT_DIRECTORY"
cp "$FILE_PATH_FULL" "$OUTPUT_DIRECTORY_TEMP_FILE"
cd "$OUTPUT_DIRECTORY"
jar -xf "$OUTPUT_DIRECTORY_TEMP_FILE"
rm "$OUTPUT_DIRECTORY_TEMP_FILE"
}
repackWar() {
echo "Type Path To Package: "
read OUTPUT_DIRECTORY
echo "Type The Final File Extension (Without Period): "
read FILE_EXTENSION
FILE_NAME_WITH_EXTENSION=$(basename "$OUTPUT_DIRECTORY")
FILE_NAME_WITH_EXTENSION+="."
FILE_NAME_WITH_EXTENSION+=$FILE_EXTENSION
cd "$OUTPUT_DIRECTORY"
jar -cf "$FILE_NAME_WITH_EXTENSION" .
}
# Bash Menu Script Example
choiceFunction() {
SUCCESS="false"
while [ $SUCCESS == "false" ]
do
clear
echo "Please enter your choice: "
echo "1 - Unpackage War"
echo "2 - Repackage War"
echo "3 - Quit"
read CHOICE
case $CHOICE in
"1") SUCCESS="true";echo "Unpacking War ..."; unpackWar;;
"2") SUCCESS="true";echo "Packing War ..."; repackWar;;
"3") SUCCESS="true";echo "Exiting ..."; exit;;
*) read -p "Invalid choice, Press any key to continue..." fakeVariableIgnoreMe;;
esac
done
}
choiceFunction