wad-lab 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wad-lab",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Interactive CLI for WAD Lab starter templates compatible with Node 12+",
5
5
  "bin": {
6
6
  "wad-lab": "bin/index.js"
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Deploy a servlet/web app folder to Tomcat 9, compile servlets, and start Tomcat.
3
+ # Usage:
4
+ # ./script.sh (runs in foreground, displays logs, press Ctrl+C to stop)
5
+ # ./script.sh -d (runs in background daemon mode)
6
+ # ./script.sh [app-dir] [-d]
7
+ set -euo pipefail
8
+
9
+ DAEMON_MODE=false
10
+ APP_ARG=""
11
+ for arg in "$@"; do
12
+ if [ "$arg" = "-d" ] || [ "$arg" = "--daemon" ]; then
13
+ DAEMON_MODE=true
14
+ elif [ -z "$APP_ARG" ]; then
15
+ APP_ARG="$arg"
16
+ fi
17
+ done
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ APP_DIR="$(cd "${APP_ARG:-$SCRIPT_DIR}" && pwd)"
21
+ APP_NAME="$(basename "$APP_DIR")"
22
+
23
+ # ---- locate Tomcat 9 (CATALINA_HOME, Desktop, Home, WSL /mnt/c, Git Bash /c, or /opt)
24
+ TOMCAT_HOME="${CATALINA_HOME:-}"
25
+ if [ -z "$TOMCAT_HOME" ]; then
26
+ for d in "$HOME"/Desktop/apache-tomcat-9* "$HOME"/Desktop/*tomcat*9* "$HOME"/Desktop/*omcat* "$HOME"/apache-tomcat-9* "$HOME"/*tomcat* /mnt/c/apache-tomcat-9* /mnt/c/apache-tomcat* /c/apache-tomcat-9* /c/apache-tomcat* /opt/apache-tomcat-9* /opt/apache-tomcat* /usr/local/apache-tomcat* "$APP_DIR"/../*tomcat*; do
27
+ if [ -x "$d/bin/catalina.sh" ] || [ -f "$d/bin/catalina.sh" ]; then
28
+ TOMCAT_HOME="$d"
29
+ break
30
+ fi
31
+ done
32
+ fi
33
+
34
+ [ -n "$TOMCAT_HOME" ] || { echo "Tomcat not found in Desktop, Home, /mnt/c, or /opt. Set CATALINA_HOME=/path/to/tomcat and retry."; exit 1; }
35
+ export CATALINA_HOME="$TOMCAT_HOME"
36
+ chmod +x "$TOMCAT_HOME"/bin/*.sh 2>/dev/null || true
37
+ echo "Tomcat : $TOMCAT_HOME"
38
+ echo "App : $APP_NAME ($APP_DIR)"
39
+
40
+ # ---- stop Tomcat if it's already running (ignore errors)
41
+ "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1 || true
42
+ sleep 2
43
+
44
+ # ---- copy the app into webapps (fresh copy, remove old exploded copy)
45
+ DEST="$TOMCAT_HOME/webapps/$APP_NAME"
46
+ rm -rf "$DEST"
47
+ mkdir -p "$DEST"
48
+ cp -r "$APP_DIR"/. "$DEST"/
49
+
50
+ # ---- compile servlets (if any .java files exist)
51
+ SRC_DIR="$DEST/WEB-INF/src"
52
+ [ -d "$SRC_DIR" ] || SRC_DIR="$DEST/WEB-INF"
53
+ mapfile -t JAVA_FILES < <(find "$SRC_DIR" -name '*.java' 2>/dev/null || true)
54
+ if [ "${#JAVA_FILES[@]}" -gt 0 ]; then
55
+ mkdir -p "$DEST/WEB-INF/classes"
56
+ if command -v cygpath >/dev/null 2>&1; then
57
+ CP_PARTS=()
58
+ for j in "$TOMCAT_HOME"/lib/*.jar; do
59
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
60
+ done
61
+ if [ -d "$DEST/WEB-INF/lib" ]; then
62
+ for j in "$DEST"/WEB-INF/lib/*.jar; do
63
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
64
+ done
65
+ fi
66
+ CP="$(IFS=";"; echo "${CP_PARTS[*]}")"
67
+ else
68
+ CP="$TOMCAT_HOME/lib/*"
69
+ [ -d "$DEST/WEB-INF/lib" ] && CP="$CP:$DEST/WEB-INF/lib/*"
70
+ fi
71
+ echo "Compiling ${#JAVA_FILES[@]} Java file(s)..."
72
+ javac -cp "$CP" -d "$DEST/WEB-INF/classes" "${JAVA_FILES[@]}"
73
+ else
74
+ echo "No .java files found, skipping compile."
75
+ fi
76
+
77
+ # ---- start Tomcat
78
+ if [ "$DAEMON_MODE" = true ]; then
79
+ "$TOMCAT_HOME/bin/startup.sh"
80
+ echo
81
+ echo "Started in background. Open: http://localhost:8080/$APP_NAME/"
82
+ echo "Logs : tail -f $TOMCAT_HOME/logs/catalina.out"
83
+ else
84
+ echo
85
+ echo "Started. Open: http://localhost:8080/$APP_NAME/"
86
+ echo "Press Ctrl+C to stop."
87
+ echo
88
+ exec "$TOMCAT_HOME/bin/catalina.sh" run
89
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Deploy a servlet/web app folder to Tomcat 9, compile servlets, and start Tomcat.
3
+ # Usage:
4
+ # ./script.sh (runs in foreground, displays logs, press Ctrl+C to stop)
5
+ # ./script.sh -d (runs in background daemon mode)
6
+ # ./script.sh [app-dir] [-d]
7
+ set -euo pipefail
8
+
9
+ DAEMON_MODE=false
10
+ APP_ARG=""
11
+ for arg in "$@"; do
12
+ if [ "$arg" = "-d" ] || [ "$arg" = "--daemon" ]; then
13
+ DAEMON_MODE=true
14
+ elif [ -z "$APP_ARG" ]; then
15
+ APP_ARG="$arg"
16
+ fi
17
+ done
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ APP_DIR="$(cd "${APP_ARG:-$SCRIPT_DIR}" && pwd)"
21
+ APP_NAME="$(basename "$APP_DIR")"
22
+
23
+ # ---- locate Tomcat 9 (CATALINA_HOME, Desktop, Home, WSL /mnt/c, Git Bash /c, or /opt)
24
+ TOMCAT_HOME="${CATALINA_HOME:-}"
25
+ if [ -z "$TOMCAT_HOME" ]; then
26
+ for d in "$HOME"/Desktop/apache-tomcat-9* "$HOME"/Desktop/*tomcat*9* "$HOME"/Desktop/*omcat* "$HOME"/apache-tomcat-9* "$HOME"/*tomcat* /mnt/c/apache-tomcat-9* /mnt/c/apache-tomcat* /c/apache-tomcat-9* /c/apache-tomcat* /opt/apache-tomcat-9* /opt/apache-tomcat* /usr/local/apache-tomcat* "$APP_DIR"/../*tomcat*; do
27
+ if [ -x "$d/bin/catalina.sh" ] || [ -f "$d/bin/catalina.sh" ]; then
28
+ TOMCAT_HOME="$d"
29
+ break
30
+ fi
31
+ done
32
+ fi
33
+
34
+ [ -n "$TOMCAT_HOME" ] || { echo "Tomcat not found in Desktop, Home, /mnt/c, or /opt. Set CATALINA_HOME=/path/to/tomcat and retry."; exit 1; }
35
+ export CATALINA_HOME="$TOMCAT_HOME"
36
+ chmod +x "$TOMCAT_HOME"/bin/*.sh 2>/dev/null || true
37
+ echo "Tomcat : $TOMCAT_HOME"
38
+ echo "App : $APP_NAME ($APP_DIR)"
39
+
40
+ # ---- stop Tomcat if it's already running (ignore errors)
41
+ "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1 || true
42
+ sleep 2
43
+
44
+ # ---- copy the app into webapps (fresh copy, remove old exploded copy)
45
+ DEST="$TOMCAT_HOME/webapps/$APP_NAME"
46
+ rm -rf "$DEST"
47
+ mkdir -p "$DEST"
48
+ cp -r "$APP_DIR"/. "$DEST"/
49
+
50
+ # ---- compile servlets (if any .java files exist)
51
+ SRC_DIR="$DEST/WEB-INF/src"
52
+ [ -d "$SRC_DIR" ] || SRC_DIR="$DEST/WEB-INF"
53
+ mapfile -t JAVA_FILES < <(find "$SRC_DIR" -name '*.java' 2>/dev/null || true)
54
+ if [ "${#JAVA_FILES[@]}" -gt 0 ]; then
55
+ mkdir -p "$DEST/WEB-INF/classes"
56
+ if command -v cygpath >/dev/null 2>&1; then
57
+ CP_PARTS=()
58
+ for j in "$TOMCAT_HOME"/lib/*.jar; do
59
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
60
+ done
61
+ if [ -d "$DEST/WEB-INF/lib" ]; then
62
+ for j in "$DEST"/WEB-INF/lib/*.jar; do
63
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
64
+ done
65
+ fi
66
+ CP="$(IFS=";"; echo "${CP_PARTS[*]}")"
67
+ else
68
+ CP="$TOMCAT_HOME/lib/*"
69
+ [ -d "$DEST/WEB-INF/lib" ] && CP="$CP:$DEST/WEB-INF/lib/*"
70
+ fi
71
+ echo "Compiling ${#JAVA_FILES[@]} Java file(s)..."
72
+ javac -cp "$CP" -d "$DEST/WEB-INF/classes" "${JAVA_FILES[@]}"
73
+ else
74
+ echo "No .java files found, skipping compile."
75
+ fi
76
+
77
+ # ---- start Tomcat
78
+ if [ "$DAEMON_MODE" = true ]; then
79
+ "$TOMCAT_HOME/bin/startup.sh"
80
+ echo
81
+ echo "Started in background. Open: http://localhost:8080/$APP_NAME/"
82
+ echo "Logs : tail -f $TOMCAT_HOME/logs/catalina.out"
83
+ else
84
+ echo
85
+ echo "Started. Open: http://localhost:8080/$APP_NAME/"
86
+ echo "Press Ctrl+C to stop."
87
+ echo
88
+ exec "$TOMCAT_HOME/bin/catalina.sh" run
89
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Deploy a servlet/web app folder to Tomcat 9, compile servlets, and start Tomcat.
3
+ # Usage:
4
+ # ./script.sh (runs in foreground, displays logs, press Ctrl+C to stop)
5
+ # ./script.sh -d (runs in background daemon mode)
6
+ # ./script.sh [app-dir] [-d]
7
+ set -euo pipefail
8
+
9
+ DAEMON_MODE=false
10
+ APP_ARG=""
11
+ for arg in "$@"; do
12
+ if [ "$arg" = "-d" ] || [ "$arg" = "--daemon" ]; then
13
+ DAEMON_MODE=true
14
+ elif [ -z "$APP_ARG" ]; then
15
+ APP_ARG="$arg"
16
+ fi
17
+ done
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ APP_DIR="$(cd "${APP_ARG:-$SCRIPT_DIR}" && pwd)"
21
+ APP_NAME="$(basename "$APP_DIR")"
22
+
23
+ # ---- locate Tomcat 9 (CATALINA_HOME, Desktop, Home, WSL /mnt/c, Git Bash /c, or /opt)
24
+ TOMCAT_HOME="${CATALINA_HOME:-}"
25
+ if [ -z "$TOMCAT_HOME" ]; then
26
+ for d in "$HOME"/Desktop/apache-tomcat-9* "$HOME"/Desktop/*tomcat*9* "$HOME"/Desktop/*omcat* "$HOME"/apache-tomcat-9* "$HOME"/*tomcat* /mnt/c/apache-tomcat-9* /mnt/c/apache-tomcat* /c/apache-tomcat-9* /c/apache-tomcat* /opt/apache-tomcat-9* /opt/apache-tomcat* /usr/local/apache-tomcat* "$APP_DIR"/../*tomcat*; do
27
+ if [ -x "$d/bin/catalina.sh" ] || [ -f "$d/bin/catalina.sh" ]; then
28
+ TOMCAT_HOME="$d"
29
+ break
30
+ fi
31
+ done
32
+ fi
33
+
34
+ [ -n "$TOMCAT_HOME" ] || { echo "Tomcat not found in Desktop, Home, /mnt/c, or /opt. Set CATALINA_HOME=/path/to/tomcat and retry."; exit 1; }
35
+ export CATALINA_HOME="$TOMCAT_HOME"
36
+ chmod +x "$TOMCAT_HOME"/bin/*.sh 2>/dev/null || true
37
+ echo "Tomcat : $TOMCAT_HOME"
38
+ echo "App : $APP_NAME ($APP_DIR)"
39
+
40
+ # ---- stop Tomcat if it's already running (ignore errors)
41
+ "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1 || true
42
+ sleep 2
43
+
44
+ # ---- copy the app into webapps (fresh copy, remove old exploded copy)
45
+ DEST="$TOMCAT_HOME/webapps/$APP_NAME"
46
+ rm -rf "$DEST"
47
+ mkdir -p "$DEST"
48
+ cp -r "$APP_DIR"/. "$DEST"/
49
+
50
+ # ---- compile servlets (if any .java files exist)
51
+ SRC_DIR="$DEST/WEB-INF/src"
52
+ [ -d "$SRC_DIR" ] || SRC_DIR="$DEST/WEB-INF"
53
+ mapfile -t JAVA_FILES < <(find "$SRC_DIR" -name '*.java' 2>/dev/null || true)
54
+ if [ "${#JAVA_FILES[@]}" -gt 0 ]; then
55
+ mkdir -p "$DEST/WEB-INF/classes"
56
+ if command -v cygpath >/dev/null 2>&1; then
57
+ CP_PARTS=()
58
+ for j in "$TOMCAT_HOME"/lib/*.jar; do
59
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
60
+ done
61
+ if [ -d "$DEST/WEB-INF/lib" ]; then
62
+ for j in "$DEST"/WEB-INF/lib/*.jar; do
63
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
64
+ done
65
+ fi
66
+ CP="$(IFS=";"; echo "${CP_PARTS[*]}")"
67
+ else
68
+ CP="$TOMCAT_HOME/lib/*"
69
+ [ -d "$DEST/WEB-INF/lib" ] && CP="$CP:$DEST/WEB-INF/lib/*"
70
+ fi
71
+ echo "Compiling ${#JAVA_FILES[@]} Java file(s)..."
72
+ javac -cp "$CP" -d "$DEST/WEB-INF/classes" "${JAVA_FILES[@]}"
73
+ else
74
+ echo "No .java files found, skipping compile."
75
+ fi
76
+
77
+ # ---- start Tomcat
78
+ if [ "$DAEMON_MODE" = true ]; then
79
+ "$TOMCAT_HOME/bin/startup.sh"
80
+ echo
81
+ echo "Started in background. Open: http://localhost:8080/$APP_NAME/"
82
+ echo "Logs : tail -f $TOMCAT_HOME/logs/catalina.out"
83
+ else
84
+ echo
85
+ echo "Started. Open: http://localhost:8080/$APP_NAME/"
86
+ echo "Press Ctrl+C to stop."
87
+ echo
88
+ exec "$TOMCAT_HOME/bin/catalina.sh" run
89
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Deploy a servlet/web app folder to Tomcat 9, compile servlets, and start Tomcat.
3
+ # Usage:
4
+ # ./script.sh (runs in foreground, displays logs, press Ctrl+C to stop)
5
+ # ./script.sh -d (runs in background daemon mode)
6
+ # ./script.sh [app-dir] [-d]
7
+ set -euo pipefail
8
+
9
+ DAEMON_MODE=false
10
+ APP_ARG=""
11
+ for arg in "$@"; do
12
+ if [ "$arg" = "-d" ] || [ "$arg" = "--daemon" ]; then
13
+ DAEMON_MODE=true
14
+ elif [ -z "$APP_ARG" ]; then
15
+ APP_ARG="$arg"
16
+ fi
17
+ done
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ APP_DIR="$(cd "${APP_ARG:-$SCRIPT_DIR}" && pwd)"
21
+ APP_NAME="$(basename "$APP_DIR")"
22
+
23
+ # ---- locate Tomcat 9 (CATALINA_HOME, Desktop, Home, WSL /mnt/c, Git Bash /c, or /opt)
24
+ TOMCAT_HOME="${CATALINA_HOME:-}"
25
+ if [ -z "$TOMCAT_HOME" ]; then
26
+ for d in "$HOME"/Desktop/apache-tomcat-9* "$HOME"/Desktop/*tomcat*9* "$HOME"/Desktop/*omcat* "$HOME"/apache-tomcat-9* "$HOME"/*tomcat* /mnt/c/apache-tomcat-9* /mnt/c/apache-tomcat* /c/apache-tomcat-9* /c/apache-tomcat* /opt/apache-tomcat-9* /opt/apache-tomcat* /usr/local/apache-tomcat* "$APP_DIR"/../*tomcat*; do
27
+ if [ -x "$d/bin/catalina.sh" ] || [ -f "$d/bin/catalina.sh" ]; then
28
+ TOMCAT_HOME="$d"
29
+ break
30
+ fi
31
+ done
32
+ fi
33
+
34
+ [ -n "$TOMCAT_HOME" ] || { echo "Tomcat not found in Desktop, Home, /mnt/c, or /opt. Set CATALINA_HOME=/path/to/tomcat and retry."; exit 1; }
35
+ export CATALINA_HOME="$TOMCAT_HOME"
36
+ chmod +x "$TOMCAT_HOME"/bin/*.sh 2>/dev/null || true
37
+ echo "Tomcat : $TOMCAT_HOME"
38
+ echo "App : $APP_NAME ($APP_DIR)"
39
+
40
+ # ---- stop Tomcat if it's already running (ignore errors)
41
+ "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1 || true
42
+ sleep 2
43
+
44
+ # ---- copy the app into webapps (fresh copy, remove old exploded copy)
45
+ DEST="$TOMCAT_HOME/webapps/$APP_NAME"
46
+ rm -rf "$DEST"
47
+ mkdir -p "$DEST"
48
+ cp -r "$APP_DIR"/. "$DEST"/
49
+
50
+ # ---- compile servlets (if any .java files exist)
51
+ SRC_DIR="$DEST/WEB-INF/src"
52
+ [ -d "$SRC_DIR" ] || SRC_DIR="$DEST/WEB-INF"
53
+ mapfile -t JAVA_FILES < <(find "$SRC_DIR" -name '*.java' 2>/dev/null || true)
54
+ if [ "${#JAVA_FILES[@]}" -gt 0 ]; then
55
+ mkdir -p "$DEST/WEB-INF/classes"
56
+ if command -v cygpath >/dev/null 2>&1; then
57
+ CP_PARTS=()
58
+ for j in "$TOMCAT_HOME"/lib/*.jar; do
59
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
60
+ done
61
+ if [ -d "$DEST/WEB-INF/lib" ]; then
62
+ for j in "$DEST"/WEB-INF/lib/*.jar; do
63
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
64
+ done
65
+ fi
66
+ CP="$(IFS=";"; echo "${CP_PARTS[*]}")"
67
+ else
68
+ CP="$TOMCAT_HOME/lib/*"
69
+ [ -d "$DEST/WEB-INF/lib" ] && CP="$CP:$DEST/WEB-INF/lib/*"
70
+ fi
71
+ echo "Compiling ${#JAVA_FILES[@]} Java file(s)..."
72
+ javac -cp "$CP" -d "$DEST/WEB-INF/classes" "${JAVA_FILES[@]}"
73
+ else
74
+ echo "No .java files found, skipping compile."
75
+ fi
76
+
77
+ # ---- start Tomcat
78
+ if [ "$DAEMON_MODE" = true ]; then
79
+ "$TOMCAT_HOME/bin/startup.sh"
80
+ echo
81
+ echo "Started in background. Open: http://localhost:8080/$APP_NAME/"
82
+ echo "Logs : tail -f $TOMCAT_HOME/logs/catalina.out"
83
+ else
84
+ echo
85
+ echo "Started. Open: http://localhost:8080/$APP_NAME/"
86
+ echo "Press Ctrl+C to stop."
87
+ echo
88
+ exec "$TOMCAT_HOME/bin/catalina.sh" run
89
+ fi
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # Deploy a servlet/web app folder to Tomcat 9, compile servlets, and start Tomcat.
3
+ # Usage:
4
+ # ./script.sh (runs in foreground, displays logs, press Ctrl+C to stop)
5
+ # ./script.sh -d (runs in background daemon mode)
6
+ # ./script.sh [app-dir] [-d]
7
+ set -euo pipefail
8
+
9
+ DAEMON_MODE=false
10
+ APP_ARG=""
11
+ for arg in "$@"; do
12
+ if [ "$arg" = "-d" ] || [ "$arg" = "--daemon" ]; then
13
+ DAEMON_MODE=true
14
+ elif [ -z "$APP_ARG" ]; then
15
+ APP_ARG="$arg"
16
+ fi
17
+ done
18
+
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ APP_DIR="$(cd "${APP_ARG:-$SCRIPT_DIR}" && pwd)"
21
+ APP_NAME="$(basename "$APP_DIR")"
22
+
23
+ # ---- locate Tomcat 9 (CATALINA_HOME, Desktop, Home, WSL /mnt/c, Git Bash /c, or /opt)
24
+ TOMCAT_HOME="${CATALINA_HOME:-}"
25
+ if [ -z "$TOMCAT_HOME" ]; then
26
+ for d in "$HOME"/Desktop/apache-tomcat-9* "$HOME"/Desktop/*tomcat*9* "$HOME"/Desktop/*omcat* "$HOME"/apache-tomcat-9* "$HOME"/*tomcat* /mnt/c/apache-tomcat-9* /mnt/c/apache-tomcat* /c/apache-tomcat-9* /c/apache-tomcat* /opt/apache-tomcat-9* /opt/apache-tomcat* /usr/local/apache-tomcat* "$APP_DIR"/../*tomcat*; do
27
+ if [ -x "$d/bin/catalina.sh" ] || [ -f "$d/bin/catalina.sh" ]; then
28
+ TOMCAT_HOME="$d"
29
+ break
30
+ fi
31
+ done
32
+ fi
33
+
34
+ [ -n "$TOMCAT_HOME" ] || { echo "Tomcat not found in Desktop, Home, /mnt/c, or /opt. Set CATALINA_HOME=/path/to/tomcat and retry."; exit 1; }
35
+ export CATALINA_HOME="$TOMCAT_HOME"
36
+ chmod +x "$TOMCAT_HOME"/bin/*.sh 2>/dev/null || true
37
+ echo "Tomcat : $TOMCAT_HOME"
38
+ echo "App : $APP_NAME ($APP_DIR)"
39
+
40
+ # ---- stop Tomcat if it's already running (ignore errors)
41
+ "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1 || true
42
+ sleep 2
43
+
44
+ # ---- copy the app into webapps (fresh copy, remove old exploded copy)
45
+ DEST="$TOMCAT_HOME/webapps/$APP_NAME"
46
+ rm -rf "$DEST"
47
+ mkdir -p "$DEST"
48
+ cp -r "$APP_DIR"/. "$DEST"/
49
+
50
+ # ---- compile servlets (if any .java files exist)
51
+ SRC_DIR="$DEST/WEB-INF/src"
52
+ [ -d "$SRC_DIR" ] || SRC_DIR="$DEST/WEB-INF"
53
+ mapfile -t JAVA_FILES < <(find "$SRC_DIR" -name '*.java' 2>/dev/null || true)
54
+ if [ "${#JAVA_FILES[@]}" -gt 0 ]; then
55
+ mkdir -p "$DEST/WEB-INF/classes"
56
+ if command -v cygpath >/dev/null 2>&1; then
57
+ CP_PARTS=()
58
+ for j in "$TOMCAT_HOME"/lib/*.jar; do
59
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
60
+ done
61
+ if [ -d "$DEST/WEB-INF/lib" ]; then
62
+ for j in "$DEST"/WEB-INF/lib/*.jar; do
63
+ [ -f "$j" ] && CP_PARTS+=("$(cygpath -w "$j")")
64
+ done
65
+ fi
66
+ CP="$(IFS=";"; echo "${CP_PARTS[*]}")"
67
+ else
68
+ CP="$TOMCAT_HOME/lib/*"
69
+ [ -d "$DEST/WEB-INF/lib" ] && CP="$CP:$DEST/WEB-INF/lib/*"
70
+ fi
71
+ echo "Compiling ${#JAVA_FILES[@]} Java file(s)..."
72
+ javac -cp "$CP" -d "$DEST/WEB-INF/classes" "${JAVA_FILES[@]}"
73
+ else
74
+ echo "No .java files found, skipping compile."
75
+ fi
76
+
77
+ # ---- start Tomcat
78
+ if [ "$DAEMON_MODE" = true ]; then
79
+ "$TOMCAT_HOME/bin/startup.sh"
80
+ echo
81
+ echo "Started in background. Open: http://localhost:8080/$APP_NAME/"
82
+ echo "Logs : tail -f $TOMCAT_HOME/logs/catalina.out"
83
+ else
84
+ echo
85
+ echo "Started. Open: http://localhost:8080/$APP_NAME/"
86
+ echo "Press Ctrl+C to stop."
87
+ echo
88
+ exec "$TOMCAT_HOME/bin/catalina.sh" run
89
+ fi